王爽《汇编语言》学习笔记--第五章+第六章
2013-01-30 00:08
260 查看
[bx]和loop指令
[BX]可以表示一个内存单元,段地址默认在DS中,偏移地址保存在BX中。
描述性符号‘()’表示一个寄存器或内存中的内容。
![](http://img.my.csdn.net/uploads/201301/29/1359448846_8803.jpg)
约定符号idata表示常量
-----------------------------------------------------------------------------------
标志S标识了一个地址,该地址处有一条指令ADD AX,AX
![](http://img.my.csdn.net/uploads/201301/29/1359457280_2612.jpg)
CX中存储的树为LOOP指令循环的次数。
![](http://img.my.csdn.net/uploads/201301/29/1359457408_5202.jpg)
实例:
在汇编源程序中,数字不能以字母开头,所以大于9fffh的十六进制数据在书写是前面要加0
"G 0012"指令表示执行程序到当前代码段(段地址在CS中)的0012h处。
在遇到"LOOP 0012"代码时,使用P指令可以使DEBUG自动重复执行"LOOP 0012"和"ADD DX,AX"指令,直至(cx)=0.
在DEBUG中
MOV AX ,[0] 表示把DS:0处的数据写入AX中
而在汇编源程序中,表示把0写入AX中
所以应该这样写
MOV AX,DS:[0]
该处的DS:即为段前缀,也可以使用CS SS ES等。
或者
MOV BX,0
MOV AX,[BX]
我们在不能确定一段内存空间中是否存放着重要数据或代码时不能随意向其中写入内容。
![](http://img.my.csdn.net/uploads/201301/30/1359478439_6721.jpg)
包含多个段的程序
实例
[BX]可以表示一个内存单元,段地址默认在DS中,偏移地址保存在BX中。
描述性符号‘()’表示一个寄存器或内存中的内容。
![](http://img.my.csdn.net/uploads/201301/29/1359448846_8803.jpg)
约定符号idata表示常量
-----------------------------------------------------------------------------------
assume cs:codesg codesg segment mov ax,2 mov cx,11 s: add ax,ax loop s mov ax,4c00h int 21h codesg ends end
标志S标识了一个地址,该地址处有一条指令ADD AX,AX
![](http://img.my.csdn.net/uploads/201301/29/1359457280_2612.jpg)
CX中存储的树为LOOP指令循环的次数。
![](http://img.my.csdn.net/uploads/201301/29/1359457408_5202.jpg)
实例:
assume cs:code code segment mov ax,0ffffh mov ds,ax mov bx,6 ;以上,设置ds:bx指向ffff:6 mov al,[bx] mov ah,0 ;以上,设置(al)=((ds*16)+(bx)),(ah)=0 mov dx,0 ;累加器寄存器清0 mov cx,3 ;循环3次 s:add dx,ax loop s ;以上累加计算(ax)*3 mov ax,4c00h int 21h ;程序返回 code ends end
在汇编源程序中,数字不能以字母开头,所以大于9fffh的十六进制数据在书写是前面要加0
"G 0012"指令表示执行程序到当前代码段(段地址在CS中)的0012h处。
在遇到"LOOP 0012"代码时,使用P指令可以使DEBUG自动重复执行"LOOP 0012"和"ADD DX,AX"指令,直至(cx)=0.
在DEBUG中
MOV AX ,[0] 表示把DS:0处的数据写入AX中
而在汇编源程序中,表示把0写入AX中
所以应该这样写
MOV AX,DS:[0]
该处的DS:即为段前缀,也可以使用CS SS ES等。
或者
MOV BX,0
MOV AX,[BX]
我们在不能确定一段内存空间中是否存放着重要数据或代码时不能随意向其中写入内容。
![](http://img.my.csdn.net/uploads/201301/30/1359478439_6721.jpg)
包含多个段的程序
实例
DATAS SEGMENT dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h;此处输入数据段代码 DATAS ENDS STACKS SEGMENT dw 0,0,0,0,0,0,0,0;此处输入堆栈段代码 STACKS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKS START: MOV AX,DATAS MOV DS,AX ;DS指向DATAS段 MOV BX,0 ;DS:BX指向DATAS段中第一个元素 MOV AX,STACKS MOV SS,AX MOV SP,16 ;设置栈顶SS:SP指向STACKS:16 ;此处输入代码段代码 MOV CX,8 S:PUSH [BX] ADD BX,2 LOOP S ;以上将DATAS段中的0~16单元中的8个字型数据一次入栈 MOV BX,0 MOV CX,8 S0:POP [BX] ADD BX,2 LOOP S0 ;以上使8个字型数据依次出栈并送到DATAS段的0~16单元中 MOV AH,4CH INT 21H CODES ENDS END START
相关文章推荐
- 王爽《汇编语言》(第二版) 学习笔记 (第五章 [BX]和loop指令 )
- 王爽《汇编语言》(第二版) 学习笔记 (第六章 包含多个段的程序 )
- 王爽《汇编语言》(第二版) 学习笔记 (第五章 [BX]和loop指令 )
- 王爽《汇编语言》(第二版) 学习笔记 (第六章 包含多个段的程序 )
- 王爽《汇编语言》(第二版) 学习笔记 (第十五章 外中断)
- 王爽《汇编语言》(第二版) 学习笔记 (第一章 基础知识)
- 王爽《汇编语言》(第二版) 学习笔记 (第二章 寄存器)
- 王爽《汇编语言》(第二版) 学习笔记 (第十五章 外中断)
- 王爽《汇编语言》学习笔记--第八章
- 王爽汇编语言第六章学习笔记和实验五答案
- 王爽《汇编语言》(第二版) 学习笔记 ( 第三章 寄存器(内存访问))
- 王爽《汇编语言》(第二版) 学习笔记 (第一章 基础知识)
- 王爽《汇编语言》(第二版) 学习笔记 ( 第三章 寄存器(内存访问))
- 王爽《汇编语言》(第二版) 学习笔记 (第四章 第一个程序 )
- 王爽《汇编语言》(第二版) 学习笔记 (第十四章 端口)
- 王爽《汇编语言》学习笔记--第三章
- 王爽《汇编语言》(第二版) 学习笔记 (第十章 CALL和RET指令 )
- 王爽《汇编语言》(第二版) 学习笔记 (第四章 第一个程序 )
- 王爽《汇编语言》(第二版) 学习笔记 (第十二章 内中断)
- 王爽《汇编语言》(第二版) 学习笔记 (第七章 更灵活的定位内存地址的方法 )