鱼C论坛

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

[已解决]汇编语言第三版p170有个地方不太明白

[复制链接]
发表于 2018-1-25 14:38:47 | 显示全部楼层 |阅读模式

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

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

x
题目是:利用除法计算100001/100
答案是:
mov dx,1
mov ax,86A1H ;(dx)*10000H+AX=100001
mov bx,100
div bx

我不太明白的是,他这个被除数换成了16进制,但是除数100却没有换,我用debug看了下,没有换确实是对的,这里有些疑惑,请问怎么回事呢,谢谢
最佳答案
2018-2-11 12:38:11
编译器的默认格式是 十进制,而要表示  十六进制  的数,在数字末尾要加H,所以在编译器看来,
86A1H是是十六进制的,编译不用进行转化,100没有加H,编译器默认他是  十进制,编译时会处理的,所以最后在程序运行时都会转化为  相同进制的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-1-25 14:52:46 From FishC Mobile | 显示全部楼层
没换是bx能放的下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-25 19:33:42 | 显示全部楼层
本帖最后由 cnkizy 于 2018-1-25 21:55 编辑
assume cs:codesg

codesg segment
start:        

                mov dx,1
                mov ax,86A1H ;(dx)*10000H+AX=100001
                mov bx,100
                div bx
        
                mov ax,4c00h
                int 21h

codesg ends
end start

2

2


1000 01(186A1H) / 100 (64H) = 1000(03E8H) ... 0001(0001H)
assume cs:codesg

codesg segment
start:        

                mov dx,1
                mov ax,86A1H ;(dx)*10000H+AX=100001
                mov bx,100H
                div bx
        
                mov ax,4c00h
                int 21h

codesg ends
end start

4

4


1000 01(186A1H) / 256 (100H) = 390(0186H) ... 0161(00A1H)



1000 01(186A1H) / 100 (64H) = 1000(03E8H) ... 0001(0001H)
1000 01(186A1H) / 256 (100H) = 390(0186H) ... 0161(00A1H)
100 和 100H 我这边算出来的肯定是有区别的。你仔细看看呢。

上面的是32位被除数 16位除数的计算。

你那个‘换’是啥意思 没能理解到意思呀。

如果是16位除以8位的 那一个 ax就能存下了 不需要dx+ax。al是商 ah是余数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-25 19:51:17 From FishC Mobile | 显示全部楼层
cnkizy 发表于 2018-1-25 19:33
1000 01(186A1H) / 100 (64H) = 1000(03E8H) ... 0001(0001H)



一个是十六进制一个是十进制肯定不一样,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-25 21:37:01 | 显示全部楼层
xiaohaituan 发表于 2018-1-25 19:51
一个是十六进制一个是十进制肯定不一样,

是啊 我知道,我就是给楼主说嘛 进制不对
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-11 12:38:11 | 显示全部楼层    本楼为最佳答案   
编译器的默认格式是 十进制,而要表示  十六进制  的数,在数字末尾要加H,所以在编译器看来,
86A1H是是十六进制的,编译不用进行转化,100没有加H,编译器默认他是  十进制,编译时会处理的,所以最后在程序运行时都会转化为  相同进制的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-12-29 10:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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