鱼C论坛

 找回密码
 立即注册
查看: 3414|回复: 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
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-8-6 07:29:13 | 显示全部楼层
代码 发全     
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2011-8-6 07:46:18 | 显示全部楼层
本帖最后由 只是丶梦 于 2011-8-6 07:48 编辑
  1. assume cs:code ds:data ss:stack
  2. data segment
  3.       db 10 dup (0)
  4. data ends
  5. stack segment
  6.       dw 20 dup (0)
  7. stack ends
  8. code segment
  9. start:mov bx,data
  10.    mov ds,bx
  11.    mov bx,stack
  12.    mov ss,bx
  13.    mov sp,50h                   ;置栈顶
  14.    call dtoc                    ;执行子程序 dtoc
  15.    
  16.    mov dh,7
  17.    mov dl,2
  18.    call show_str
  19.    
  20.    mov ax,4c00h                 ;退出程序初始化
  21.    int 21h                      ;退出程序
  22. dtoc:push ax
  23.       push di
  24.    push bx
  25.     mov ax,520                   ;设置被除数
  26.    mov di,0                     ;记录入栈次数
  27.    mov bx,10d                   ;设置除数
  28. e:div bx                       ;除法 ax = 商 dx = 余数
  29.    add dx,30H                   ;余数转码+30h
  30.    push dx                      ;入栈
  31.    mov dx,0                     ;清空余数
  32.    mov cx,ax                    ;cx = 商
  33.    inc di                       ;记录入栈次数
  34.    jcxz e2                      ;判断商=0?
  35.    jmp e                        ;跳到e循环
  36.    e2:mov cx,bx                    ;设置入栈次数为循环次数
  37.       mov di,0
  38.    e3:pop bx                       ;出栈
  39.       mov ds:[di],bx               ;存入数据
  40.    inc bx                       ;递增数据偏移
  41.       loop e3                      ;循环e3
  42.    pop bx
  43.    pop di
  44.    pop ax
  45.     ret                          ;返回
  46. show_str:push ax
  47.          push bp
  48.    push di
  49.    push cx
  50.    push si
  51.    push dx
  52.          mov ax,0B800h             ;定义显存
  53.          mov es,ax                 ;设置es附加段
  54.       mov al,0A0h               ;al=行号
  55.       mov ah,0                  ;ah高位清零
  56.    mul dh                    ;乘法 ax = 行
  57.    mov bp,ax                 ;bp = ax行
  58.    mov al,2                  ;al=列号
  59.    mov ah,0                  ;ah高位清零
  60.    mul dl                    ;乘法 ax = 列
  61.    mov di,ax                 ;di = ax列
  62.    mov si,0                  ;数据第1个
  63.        x:mov cl,[si]               ;取数据
  64.    mov ch,0                  ;高位清零
  65.    jcxz rem                  ;为0跳出
  66.       mov es:[bp+di],cl         ;写入显存数据  基地址:行+列
  67.    mov cl,02h
  68.    mov es:[bp+di+1],cl       ;写入显存属性  基地址:行+列+1
  69.    add di,2                  ;进入下一列
  70.    inc si                    ;递增 取数据偏移
  71.    jmp x                     ;跳到X 循环
  72.      rem:pop dx
  73.       pop si
  74.    pop cx
  75.    pop di
  76.    pop bp
  77.    pop ax
  78.       ret                       ;返回
  79. code ends
  80. end start

复制代码

好像放几下我都有点忘了没写全 在debug就错误了
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2011-8-6 16:56:16 | 显示全部楼层
:'(求解释啊
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-8-6 20:09:42 | 显示全部楼层
你sp 定位错了  再看看
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2011-8-8 10:03:37 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-7-1 16:02

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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