. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->CALL和RET指令
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  课程设计1  debug 到想死 请眼神犀利者帮忙指错!  [待解决] 回复[ 4次 ]   点击[ 340次 ]  
gao693282043
[帖 主]   [ 发表时间:2010-09-10 15:34 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-04-06 11:41
编译通过,运行只显示一行,debug 到想死,仍查不出错在哪?
下面是代码  

assume cs:code,ds:data,ss:stack

dataes segment 
db '1975','1976','1977','1978','1979','1980','1981','1982','1983',
   '1984','1985','1986','1987','1988','1989','1990','1991','1992',
   '1993','1994','1995'


dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514,
   345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000 

dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226,
   11542,14430,15257,17800 

dataes ends 

data segment
dw 16 dup (?)
data ends

stack segment 
dw 16 dup(?) 
stack ends 

code segment

start:mov ax,stack ;初始设置
     mov ss,ax
     mov sp,20h
     mov ax,data
     mov ds,ax
     mov ax,dataes
     mov es,ax
     
     mov bx,0     ;初始化寄存器
     mov si,0
     mov di,0
     mov cx,21
     
all: push cx
     mov ax,es:[di]   ;es:[di] 指向年份字符串首地址
     mov [si],ax
     mov ax,es:2[di]
     mov 2[si],ax
     mov byte ptr 4[si],0
     
     mov dh,0
     mov dl,10h   ;列数从10h开始
     mov cl,07h
     call show_str
     
;以上是显示年份    
;-----------------------------

     mov ax,es:84[di]  ;es:84[di] 指向年收入首地址
      mov dx,es:86[di]
     call dtoc
     
     mov dh,0
     mov dl,20h    ;列数间隔10h
     mov cl,07h    
     call show_str
     
;以上是显示年收入  
;---------------------------------
    
     mov ax,es:168[bx] ;es:168[bx] 指向雇员首地址
      mov dx,0
     call dtoc
     
     mov dh,0
     mov dl,30h     ;列数间隔10h
     mov cl,07h
     call show_str
     
;以上是显示雇员    
;---------------------------------
     mov ax,es:84[di]  
     mov dx,es:86[di]
     mov cx,es:168[bx]
     call divdw
     call dtoc
     
     mov dh,0
     mov dl,40h      ;列数间隔10h
     mov cl,07h
     call show_str
;以上是显示人均年收入  
      
     mov si,0
     add di,4
     add bx,2
     inc dh
     pop cx
     loop all
     
     mov ax,4c00h
     int 21h
;---------------------------------

;功能: 将dword型数据转变为表示十进制数的字符串,字符串以0为结尾 
;入口参数: (ax)=dword型数据的低16位,(dx)=dword型数据的高16位,ds:si指向字符串的首地址 
;出口参数: 无 
dtoc proc
    push ax
    push bx
    push cx
    push dx
    push si
    
    mov bx,0
 d1:mov cx,10
    call divdw
    
    add cl,30h
    push cx
    inc bx    ;设置计数器,以便后来出栈循环
    mov cx,ax
    jcxz d2
    jmp short d1
 d2:mov cx,bx
 d3:pop ax
    mov [si],al
    inc si
    loop d3
    mov byte ptr [si+1],0 ;字符串以0结尾
     
     pop si
     pop dx
     pop cx
     pop bx
     pop ax
     ret
dtoc endp
;---------------------------------

;功能:进行不会产生溢出的除法运算,被除数为dword型,除数为word型,记过为dword型 
;入口参数:(ax)=dword型数据的低16位,(dx)=dword型数据的高16位 ,(cx)=除数 
;出口参数:(dx)=结果的高16位,(ax)=结果的低16位 ,(cx)=余数 
;公式X/N=INT(H/N)*65536+[REM(H/N)*65536+L]/N, 65536=10000h,相当于左移四位
divdw proc
     push bx
     
     push ax     
     mov ax,dx
     mov dx,0
     div cx
     mov bx,ax
     pop ax
     div cx
     mov cx,dx
     mov dx,bx
     
     pop bx       
     ret
divdw endp
;------------------------------------
   
;功能:在指定的行列位置用指定的颜色显示一个以0结尾的字符串 
;入口参数:(dh)=行数(取值范围1~25),(dl)=列数(取值范围1~80) ,(cl)=颜色,ds:si指向字符串的首地址     
;出口参数: 无 
show_str proc 
       push ax
       push bx
       push cx
       push dx
       push es
       push si
       push di
              
       mov al,40h
       dec dh
       mul dh
       mov bx,ax
       
       mov al,2
       dec dl
       mul dl
       add bx,ax
       
       mov ax,0b800h
       mov es,ax
       mov di,0
     s:mov al,cl  ;保存颜色值
       mov cl,[si]
       mov ch,0
       jcxz s0
       mov ch,al
       mov es:[bx+di],cx
       inc si
       add di,2
       mov cl,al  ;恢复颜色值
       jmp s
    s0:pop di
       pop si
       pop es
       pop dx
       pop cx
       pop bx
       pop ax
       ret
show_str endp
     
     
code ends
     end start
beilaiwaini
[第1楼]   [ 回复时间:2010-09-12 14:25 ]   [引用]   [回复]   [ top ] 
荣誉值:2
信誉值:1
注册日期:2010-07-09 15:30
mov dh,0 
show_str proc中
dec dh!
dh不是变负数了吗!
beilaiwaini
[第2楼]   [ 回复时间:2010-09-12 14:35 ]   [引用]   [回复]   [ top ] 
荣誉值:2
信誉值:1
注册日期:2010-07-09 15:30
d3:pop cx吧!!!
beilaiwaini
[第3楼]   [ 回复时间:2010-09-12 14:42 ]   [引用]   [回复]   [ top ] 
荣誉值:2
信誉值:1
注册日期:2010-07-09 15:30
之后的没发现了!自己调试一下看看!
anuya
[第4楼]   [ 回复时间:2010-09-14 14:06 ]   [引用]   [回复]   [ top ] 
荣誉值:2
信誉值:0
注册日期:2010-09-13 18:17
代码不易冗余!
欢迎加群一起讨论  116783338
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved