汇编语言第三版p170有个地方不太明白
题目是:利用除法计算100001/100答案是:
mov dx,1
mov ax,86A1H ;(dx)*10000H+AX=100001
mov bx,100
div bx
我不太明白的是,他这个被除数换成了16进制,但是除数100却没有换,我用debug看了下,没有换确实是对的,这里有些疑惑,请问怎么回事呢,谢谢 没换是bx能放的下 本帖最后由 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
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
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是余数 cnkizy 发表于 2018-1-25 19:33
1000 01(186A1H) / 100 (64H) = 1000(03E8H) ... 0001(0001H)
一个是十六进制一个是十进制肯定不一样, xiaohaituan 发表于 2018-1-25 19:51
一个是十六进制一个是十进制肯定不一样,
是啊 我知道,我就是给楼主说嘛 进制不对 编译器的默认格式是 十进制,而要表示十六进制的数,在数字末尾要加H,所以在编译器看来,
86A1H是是十六进制的,编译不用进行转化,100没有加H,编译器默认他是十进制,编译时会处理的,所以最后在程序运行时都会转化为相同进制的。
页:
[1]