鱼C论坛

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

疑惑 指令在debug执行后变了

[复制链接]
发表于 2011-8-6 00:10:19 | 显示全部楼层 |阅读模式

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

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

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

如图本来命令是push ax
                         push di
                         push bx
最后到CALL准备调用这个时候却变成ADD什么什么的
求解释.恍然大悟的解释.
2.png
1.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-8-6 07:29:13 | 显示全部楼层
代码 发全     
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 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:[di],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,[si]               ;取数据
   mov ch,0                  ;高位清零
   jcxz rem                  ;为0跳出
      mov es:[bp+di],cl         ;写入显存数据  基地址:行+列
   mov cl,02h
   mov es:[bp+di+1],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就错误了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-8-6 16:56:16 | 显示全部楼层
:'(求解释啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-8-6 20:09:42 | 显示全部楼层
你sp 定位错了  再看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-8-8 10:03:37 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-2-8 15:16

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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