+ -
当前位置:首页 → 问答吧 → 菜鸟关于汇编的一点问题,问题见注释,请各位大虾指教指教呀

菜鸟关于汇编的一点问题,问题见注释,请各位大虾指教指教呀

时间:2011-05-02

来源:互联网

写一个完整的程序放在代码段C_SEG中,要求把数据段D_SEG中的AUGEND和附加段E_SEG中的ADDEND相加,并把结果存放在D_SEG 段中的SUM中。其中AUGEND、ADDEND和SUM均为双精度数,AUGEND赋值为99251,ADDEND赋值为 -15962。

d_seg segment
  augw label word ;label是做什么用的?这里未定义augw的值,是不是默认为值0?
  augend dd 99251
  sum dd ?
d_seg ends

e_seg segment
  addw label word
  addend dd -15962
e_seg ends

c_seg segment 
  main proc far
  assume cs:c_seg,ds:d_seg,es:e_seg
  start: push ds
  sub ax,ax
  push ax
  mov ax,d_seg ;这条指令执行完后为什么ax寄存器的值变为07 10
  mov ds,ax
  mov ax,e_seg ;这条指令执行后为什么ax变成了07 11
  mov es,ax
   
  mov ax,augw
  mov bx,augw+2
  add ax,es:addw ;这句话是把ax里面的值和es相加?为什么要这样写啊?
  adc bx,es:addw+2
  mov word ptr sum,ax ;这里为什么要用word ptr,我把它去掉好像对结果没有什么影响
  mov word ptr[sum+2],bx
  ret
  main endp
c_seg ends
  end start
本人刚学汇编,这段代码有很多看不懂,请各位大虾多指教指教啊。。

作者: z373415312   发布时间: 2011-05-02

augw label word ;label是做什么用的?这里未定义augw的值,是不是默认为值0?
label是标号伪指令,表示下一数据augen的地址与augw是一样的;

mov ax,d_seg ;这条指令执行完后为什么ax寄存器的值变为07 10
这条指令是把数据段d_seg的段地址赋给寄存器ax;

mov ax,e_seg ;这条指令执行后为什么ax变成了07 11
这条指令是把附加段e_seg的段地址赋给寄存器ax;

add ax,es:addw ;这句话是把ax里面的值和es相加?为什么要这样写啊?
因为默认的数据段是ds;

mov word ptr sum,ax ;这里为什么要用word ptr,我把它去掉好像对结果没有什么影响
这里word ptr表示是2个字节的内存地址,这里不写,没有关系,因为后面的ax已经说明了它的大小

作者: leetow2003   发布时间: 2011-05-02

楼上给解答的很详细。。。结贴 散分~~~~~~~~

作者: wangzaiwei2006   发布时间: 2011-05-02