鱼C论坛

 找回密码
 立即注册
查看: 1704|回复: 1

实验10.3 debug32与直接运行结果不同为什么

[复制链接]
发表于 2014-10-21 02:37:33 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 泡泡 于 2014-10-21 02:59 编辑

实验10.3
用debug32调试结果正确,直接运行结果不对。
那个可以提供一下,解决问题的思路?
注:调试运行,就算用g 命令跳着运行结果也正确。
汇编代码如下:
  1. assume cs:code

  2. date segment
  3.         db 20h dup(0)

  4. date ends
  5. stack segment
  6.         db 20 dup(0)
  7. stack ends
  8. code segment
  9.   start:mov ax,1266
  10.         mov bx,date
  11.         mov es,bx
  12.         mov si,0
  13.         mov bx,stack
  14.         mov ss,bx
  15.         mov sp,20h
  16.         call dtoc
  17.        
  18.         mov dx,es
  19.         mov ds,dx
  20.         mov dh,8
  21.         mov dl,3
  22.         mov cl,2
  23.         call show_str

  24.         mov ax,4c00h
  25.         int 21h
  26.        
  27.         ;显示字符 子程序
  28.         ;在屏幕上 第8行(dh),3列(dl) 开始显示字符,颜色为(cl),数据来源来ds段中
  29. show_str:push dx
  30.         push sp
  31.         push bx
  32.         push cx
  33.         push es
  34.         push si

  35.         ;每行占0a0h个字节         25行80列 计算好偏移存至bp中
  36.         mov ah,0
  37.         mov al,0a0h
  38.         mul dh       
  39.         mov bp,ax
  40.         mov ah,0
  41.         mov al,2
  42.         mul dl
  43.         add bp,ax
  44.        
  45.         mov ax,0b800h                        ;显存基址
  46.         mov es,ax
  47.         mov bx,0
  48.         mov si,0
  49.         mov ah,cl        ;颜色
  50.         mov ch,0
  51.       s:mov cl,[bx];
  52.         jcxz ok                                ;if(cx == 0)jcxz ok
  53.         mov al,cl
  54.         mov es:[si + bp],ax
  55.         add bx,1                        ;+1 、+2 加的都是字节数               
  56.         add si,2

  57.         jmp near ptr s
  58.        
  59.      ok:pop si
  60.         pop es
  61.         pop cx
  62.         pop bx
  63.         pop sp
  64.         pop dx
  65.         ret

  66.   divdw:nop                ;子程序实现除法功能
  67.         nop                ;被除数ax(低位1000) dx(高位1)  表示11000h        除数bx 表示1
  68.         nop                ;返回:ax存低位商,dx存放高位商,cx存余数
  69.         push es
  70.         push ds

  71.         mov ds,ax
  72.         mov es,dx

  73.         mov ax,dx
  74.         sub dx,dx
  75.         div bx
  76.         mov es,ax        ;临时结果高位商:es
  77.         mov ax,ds
  78.         div bx
  79.         mov cx,dx        ;余数
  80.         mov dx,es        ;最终返回的高位商
  81.        
  82.         pop ds
  83.         pop es
  84.         ret        ;返回 商ax,dx, 余数cx

  85.    dtoc:nop        ;将ax中的数据转化成十进制字符,存至数据段中。将数据存储在es段中。
  86.                 ;参数来自己ax,下次再实现参数来自己内存
  87.         push cx
  88.         push dx
  89.         push bx
  90.         push si
  91.        
  92.         mov si,0
  93.         mov bx,0ah
  94.      dc:mov cx,ax
  95.         jcxz near ptr dhh
  96.              call divdw
  97.         add cx,30h
  98.         push cx
  99.         inc si
  100.         jmp near ptr dc
  101.        
  102.     dhh:mov cx,si
  103.         mov bx,0
  104.     dh3:nop
  105.         ;pop word ptr es:[bx]
  106.         pop ax
  107.         mov es:[bx],al
  108.         add bx,1
  109.         loop dh3
  110.        
  111.         pop si
  112.         pop bx
  113.         pop dx
  114.         pop cx
  115.         ret

  116.        


  117. code ends

  118. end start
复制代码


小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-10-21 02:39:58 | 显示全部楼层
问题没有解决 ,刚才不小心点了一下 问题已解决:dizzy:
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-7-6 09:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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