Snow 发表于 2011-7-14 14:07:06

<汇编语言>第十章的一个问题

10.9模块化程序设计    里面一段程序是这样的

data segment
dw 1,2,3,4,5,6,7,8
dd 0,0,0,0,0,0,0,0
data ends
code segment
   start:mov ax,data
   mov ds,ax
   mov si,0
   mov di,16
   mov cx,8
s:
mov bx,
call cube
mov,ax
mov .2,dx
add si,2
add di,4
loop s
mov ax,4c00h
int 21h
cube:mov ax,bx
mul bx
mul bx
ret
code ends
end start
用蓝色标注那条代码 我不懂什么意思为什么要将dx传入,2。前面都没有出初始化dx ,dx应该是个未知的值啊

demon 发表于 2011-7-14 15:14:46

本帖最后由 demon 于 2011-7-14 15:21 编辑

等价于
mov ,dx
还等价于
mov 2,dx

对关于DX的问提
主要在于MUL指令,和DIV指令一样的,
DX存放的乘法结果值的高位,低位仍在AX里了!


{:1_1:}

Snow 发表于 2011-7-14 15:48:08

demon 发表于 2011-7-14 15:14 static/image/common/back.gif
等价于
mov ,dx
还等价于


对于mul指令我还有些不懂,书上说 8位乘法 一个操作数放在8位寄存器或内存字节单元中另一个操作数默认放在ah中
而书里面却又这样一段话
计算100*10
100和10小于255 可以做8位乘法 程序如下:
mov al,100
mov bl,10
mul bl
为什么第一条语句里面是将100给了al    而不是ah?

demon 发表于 2011-7-14 15:51:50

Snow 发表于 2011-7-14 15:48 static/image/common/back.gif
对于mul指令我还有些不懂,书上说 8位乘法 一个操作数放在8位寄存器或内存字节单元中另一个操作数默认放 ...

8位,一个默认是AL中,所以例子是对的

我这电子书是AL没有问题,不知道你那什么原因!

Snow 发表于 2011-7-14 16:10:05

搞掂了 是书写错了吧百度百科上也说是al的

Snow 发表于 2011-7-14 18:39:40

demon 发表于 2011-7-14 15:51 static/image/common/back.gif
8位,一个默认是AL中,所以例子是对的

我这电子书是AL没有问题,不知道你那什么原因!

还有个问题   在子程序cube里面mul bx 这样是十六位的乘法啊,ax将会用来存放结果的低位那cube子程序的最前面那一句mov ax,bx不就 没意义了吗

页: [1]
查看完整版本: <汇编语言>第十章的一个问题