|
3鱼币
本帖最后由 莫名其妙 于 2012-2-20 23:18 编辑
dtoc: push dx
push cx
push bx
push si
push di ;各种进栈
mov bx,0
mov si,0
x: mov cx,10 ;除数为10
mov dx,0 ;被除数高16位置0
div cx ;ax 是商 dx是余数 余数+30h进栈 然后在出栈
mov cx,ax ;进行循环判断 cx=0 进行 jcxz 跳转
add dx,30h
push dx ;将余数保存进栈
inc bx ;保存push次数
jcxz orzz ;跳
jmp short x
orzz: mov cx,bx ;读取push次数 设置循环值
pop ax ;余数出栈
mov ds:[si],al
jcxz orz
inc si
dec bx ;循环次数自减
jmp short orzz
orz: pop di
pop si
pop bx
pop cx
pop dx
ret
以上是第10章 10-3题 中间call dtoc 代码 按照我的思路应该是可以执行的但是一直DEBUG 报错 求修改!~
下面是debug 单步跟踪的 出现问题的地方就在 ret 以后 难道是栈的问题? 我设置的栈 db 10 dup (0) 难道call 保存的IP没存上?
-t
AX=0000 BX=00A5 CX=0000 DX=0031 SP=FFFE BP=0000 SI=1405 DI=0000
DS=1404 ES=13F4 SS=1405 CS=1406 IP=004E NV UP EI PL ZR NA PE NC
1406:004E 5A POP DX
-t
AX=0000 BX=00A5 CX=0000 DX=0013 SP=0000 BP=0000 SI=1405 DI=0000
DS=1404 ES=13F4 SS=1405 CS=1406 IP=004F NV UP EI PL ZR NA PE NC
1406:004F C3 RET
-d 1404:0
1404:0000 31 32 36 36 36 00 00 00-00 00 00 00 00 00 00 00 12666...........
1404:0010 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
1404:0020 B8 7A 31 BB 04 14 8E DB-BB 05 14 8E D3 BE 00 00 .z1.............
1404:0030 E8 0E 00 B6 08 B2 03 B1-CA E8 34 00 B8 00 4C CD ..........4...L.
1404:0040 21 52 51 53 56 57 BB 00-00 BE 00 00 B9 0A 00 BA !RQSVW..........
1404:0050 00 00 F7 F1 8B C8 83 C2-30 52 43 E3 02 EB ED 8B ........0RC.....
1404:0060 CB 58 88 04 E3 04 46 4B-EB F5 5F 5E 5B 59 5A C3 .X....FK.._^[YZ.
1404:0070 53 51 56 B0 A0 FE CE F6-E6 8B D8 B0 02 F6 E2 83 SQV.............
-t
AX=0000 BX=00A5 CX=0000 DX=0013 SP=0002 BP=0000 SI=1405 DI=0000
DS=1404 ES=13F4 SS=1405 CS=1406 IP=0000 NV UP EI PL ZR NA PE NC
1406:0000 B87A31 MOV AX,317A
-
|
|