只是丶梦 发表于 2011-8-6 00:10:19

疑惑 指令在debug执行后变了

本帖最后由 只是丶梦 于 2011-8-9 03:21 编辑

如图本来命令是push ax
                         push di
                         push bx
最后到CALL准备调用这个时候却变成ADD什么什么的
求解释.恍然大悟的解释.

zhdw 发表于 2011-8-6 07:29:13

代码 发全   

只是丶梦 发表于 2011-8-6 07:46:18

本帖最后由 只是丶梦 于 2011-8-6 07:48 编辑

assume cs:code ds:data ss:stack
data segment
      db 10 dup (0)
data ends
stack segment
      dw 20 dup (0)
stack ends
code segment
start:mov bx,data
   mov ds,bx
   mov bx,stack
   mov ss,bx
   mov sp,50h                   ;置栈顶
   call dtoc                  ;执行子程序 dtoc
   
   mov dh,7
   mov dl,2
   call show_str
   
   mov ax,4c00h               ;退出程序初始化
   int 21h                      ;退出程序
dtoc:push ax
      push di
   push bx
    mov ax,520                   ;设置被除数
   mov di,0                     ;记录入栈次数
   mov bx,10d                   ;设置除数
e:div bx                     ;除法 ax = 商 dx = 余数
   add dx,30H                   ;余数转码+30h
   push dx                      ;入栈
   mov dx,0                     ;清空余数
   mov cx,ax                  ;cx = 商
   inc di                     ;记录入栈次数
   jcxz e2                      ;判断商=0?
   jmp e                        ;跳到e循环
   e2:mov cx,bx                  ;设置入栈次数为循环次数
      mov di,0
   e3:pop bx                     ;出栈
      mov ds:,bx               ;存入数据
   inc bx                     ;递增数据偏移
      loop e3                      ;循环e3
   pop bx
   pop di
   pop ax
    ret                        ;返回
show_str:push ax
         push bp
   push di
   push cx
   push si
   push dx
         mov ax,0B800h             ;定义显存
         mov es,ax               ;设置es附加段
      mov al,0A0h               ;al=行号
      mov ah,0                  ;ah高位清零
   mul dh                  ;乘法 ax = 行
   mov bp,ax               ;bp = ax行
   mov al,2                  ;al=列号
   mov ah,0                  ;ah高位清零
   mul dl                  ;乘法 ax = 列
   mov di,ax               ;di = ax列
   mov si,0                  ;数据第1个
       x:mov cl,               ;取数据
   mov ch,0                  ;高位清零
   jcxz rem                  ;为0跳出
      mov es:,cl         ;写入显存数据基地址:行+列
   mov cl,02h
   mov es:,cl       ;写入显存属性基地址:行+列+1
   add di,2                  ;进入下一列
   inc si                  ;递增 取数据偏移
   jmp x                     ;跳到X 循环
   rem:pop dx
      pop si
   pop cx
   pop di
   pop bp
   pop ax
      ret                     ;返回
code ends
end start


好像放几下我都有点忘了没写全 在debug就错误了

只是丶梦 发表于 2011-8-6 16:56:16

:'(求解释啊

zhdw 发表于 2011-8-6 20:09:42

你sp 定位错了再看看

只是丶梦 发表于 2011-8-8 10:03:37

zhdw 发表于 2011-8-6 20:09 static/image/common/back.gif
你sp 定位错了再看看

:dizzy:额..30h才对.谢谢
页: [1]
查看完整版本: 疑惑 指令在debug执行后变了