鱼C论坛

 找回密码
 立即注册
查看: 2820|回复: 5

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

[复制链接]
发表于 2011-7-14 14:07:06 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
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,[si]
call cube
mov  [di],ax
mov [di].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传入[di],2。前面都没有出初始化dx ,dx应该是个未知的值啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-7-14 15:14:46 | 显示全部楼层
本帖最后由 demon 于 2011-7-14 15:21 编辑

等价于
mov [di+2],dx
还等价于
mov 2[di],dx

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


{:1_1:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-7-14 15:48:08 | 显示全部楼层

对于mul指令我还有些不懂,书上说 8位乘法 一个操作数放在8位寄存器或内存字节单元中  另一个操作数默认放在ah中
而书里面却又这样一段话
计算100*10
100和10小于255 可以做8位乘法 程序如下:
mov al,100
mov bl,10
mul bl
为什么第一条语句里面是将100给了al    而不是ah?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-7-14 15:51:50 | 显示全部楼层
Snow 发表于 2011-7-14 15:48
对于mul指令我还有些不懂,书上说 8位乘法 一个操作数放在8位寄存器或内存字节单元中  另一个操作数默认放 ...

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

我这电子书是AL没有问题,不知道你那什么原因!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-7-14 16:10:05 | 显示全部楼层
搞掂了 是书写错了吧  百度百科上也说是al的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-7-14 18:39:40 | 显示全部楼层
demon 发表于 2011-7-14 15:51
8位,一个默认是AL中,所以例子是对的

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

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

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-29 19:49

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表