回 帖 发 新 帖 刷新版面

主题:学习的第一个汇编例题的几点疑问

(V-(X*Y+Z-540)/X

编程:
  mov   ax,x
  imul  y
  mov   cx,ax
  [color=800000]mov   bx,dx[/color] 
  mov   ax,z
  [color=800000]cwd[/color] (转字节有什么作用?)
  add   cx,ax
  [color=800000]adc   bx,dx[/color](bx等于dx了,它们相加有什么意思?)
  sub   cx,540
  [color=800000]sbb   bx,0[/color](bx减0是什么意思)
  mov   ax,v
  [color=800000]cwd[/color]
  sub   ax,cx
  [color=800000]sbb   dx,bx[/color]()
  idiv  x

 能详细的告诉我[color=800000]红色[/color]字体部分的作用吗?越详细越好,谢谢

回复列表 (共3个回复)

沙发

mov   ax,x
  imul  y
-----------------------
imul 有符号乘法指令,乘积保存在 dx:ax, 
-----------------------
  mov   cx,ax
  mov   bx,dx   ;乘积保存在 bx:cx

  mov   ax,z
  cwd   ;把ax扩展到 dx:ax (扩展后,dx要么全0,要么全1)

  add   cx,ax
  adc   bx,dx(dx被改变了)
---------------
这两句就是32位的加法: bx:cx + dx:ax
---------------

在往后就一样了, 32位的减法 和 有符号除法

sub   cx,540 
sbb   bx,0    ;540如果用32位存储,那么高16位是0

----------------
mov   ax,v
cwd
sub   ax,cx
sbb   dx,bx
-------------
32位的减法,   bx:cx - dx:ax
-------------


P.S.通过上机练习,进一步熟悉指令

板凳

学习使用debug 命令,否则等于你没学过汇编语言一样

3 楼


thanks!!!!

我来回复

您尚未登录,请登录后再回复。点此登录或注册