+ -
当前位置:首页 → 问答吧 → 初学汇编语言有几个问题,求助

初学汇编语言有几个问题,求助

时间:2011-06-09

来源:互联网


1.在X86汇编语言中,正确的出栈指令是()
A. POP OFFSET VARW B POP ES:[DX+SI+3]
C.POP [BP+DI+3] D POP AH

我的疑问是A选项,OFFSET VARW 获取标号VARW的偏移地址,POP之后将数据放入该地址中。但觉得B也对。
哪里出问题了?


2.在X86汇编语言中,正确的乘法指令是()
A IMUL WORD PTR[BX+SI+100] B IMUL DS
C MUL BYTE PTR[DX+DI+100H] D MUL IP

这题我觉得A,C都是正确的。

3. 关于AAA指令,比如有段程序是这样的:
  MOV AX,2337H
  ADD AL,39H ;AF=(),PF=()
  AAA ;AH=(),AL=()
  ...
疑问:AH不为0,执行AAA之后结果应该是怎么样的?
   
求具体的思路 谢谢了

作者: laojiaqi   发布时间: 2011-06-09

1.B的问题是DX不能用于间接寻址。
2.和第一题一样,DX不能用于间接寻址。
能间接寻址的寄存器只有bx,bp,si,di。
第3题我也不会。

作者: haojiahuo50401   发布时间: 2011-06-10

刚才上网查了一下:
http://jpkc.zzu.edu.cn/hbyycai/courses/list.asp?id=86
有这个例子:
mov ax,0608h ;ax=0608h,表示非压缩BCD码68
mov bl,09h ;bl=09h,表示非压缩BCD码9
add al,bl ;二进制加法:al=08h+09h=11h
aaa ;十进制调整:ax=0707h
  ;实现非压缩BCD码加法:68+9=77
所以楼主的问题应该也能得到解决:本来是2337h+39h=2370h,但是要实现非压缩BCD码加法,执行aaa指令,你可以认为是进行十进制加法:所以结果应该为2376h。

作者: haojiahuo50401   发布时间: 2011-06-10