几个简单的汇编语言问题

1.判断下列汇编语句的正确性并说明原因
MOV [AX],BH
MOV [SP],AX
OUT 10H,CL
CMP 36H,AL
2.标号作符号地址使用,出现在操作数域时,语句JMP BEGIN 中符号BEGIN表示的是目标地址;而在语句LOOP BEGIN中却是同时表示目标地址和偏移地址,它们之间有什么区别吗?为什么要有这样的区别呢?
3。段边界定义SEGMENT.....END和过程定义PROC...ENDP和模块定义NAME....END有什么区别?谢谢
间接寻址只能用bx,dx,si,di吗?out和in的操作只能用ax,dx吗?

1.判断下列汇编语句的正确性并说明原因
MOV [AX],BH ;错,AX不能加方括号来访问地址
MOV [SP],AX ;错,SP不能加方括号
OUT 10H,CL ;错,OUT指令中源操作数只能是AX或AL
CMP 36H,AL ;错,CMP指令中目的操作数不能为立即数
2.标号作符号地址使用,出现在操作数域时,语句JMP BEGIN 中符号BEGIN表示的是目标地址;而在语句LOOP BEGIN中却是同时表示目标地址和偏移地址,它们之间有什么区别吗?为什么要有这样的区别呢?
JMP指令可以访问内存的任何空间,LOOP则只能访问—128~+127之间的内存空间,所以是相对位移。
3。段边界定义SEGMENT.....END和过程定义PROC...ENDP和模块定义NAME....END有什么区别?谢谢问题补充:
这个要去了解段、过程和模块的区别。
间接寻址只能用bx,dx,si,di吗?out和in的操作只能用ax,dx吗?
间接寻址只能用bx,dx,si,di。out和in的操作中只能用ax,al,dx和0~255的立即数端口地址追问

问题2中,你说“LOOP则只能访问—128~+127之间的内存空间”,但是这样怎么表示“目的地址”呢?目的地址是20位,偏移地址是16位,是吗?

追答

目的地址是20位,不过它是由段地址和偏移地址来得到,段地址和偏移地址都是16位,20位的物理地址=段地址*10H+偏移地址,LOOP指令是程序段的,所以它的段地址是在CS中,偏移地址由LOOP指令的偏移地址加后面标号的偏移量得到。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-02-07
1.没对的。【】里面的应该是bx,DX,DI,SI。out不应该用cl寄存器。CMP AL,36H
第2个回答  2012-02-09
里面的应该是bx,DX,DI,SI。out不应该用cl寄存器。CMP AL,36H
相似回答