鱼C论坛

 找回密码
 立即注册
查看: 2617|回复: 4

[已解决]急,课程设计一竟然我写处了17处错误!!!

[复制链接]
发表于 2017-3-21 20:12:56 | 显示全部楼层 |阅读模式

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

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

x
编写程序为王爽老师的《汇编语言》第211页课程设计一
编写工具 Notepa++
编译环境 XP虚拟机
编译工具 masm5.0
问题代码 设计1.zip

源代码:
assume cs:code,ds:data,es:table

data segment
    db '1975','1976','1977','1978','1979','1980','1981','1982','1983'

    db '1984','1985','1986','1987','1988','1989','1990','1991','1992'

    db '1993','1994','1995'

    dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514

    dd 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

    dw 11452,14430,15257,17800
data ends

table segment
    db 21 dup ('year summ ne ?? ')
table ends

fruit segment
    db 32 dup(0)
fruit ends

code segment
   

;初始化阶段
;将原始数据整理放到table处
;套用实验七的程序加以修改

start:        mov ax,data
            mov ds,ax
            mov ax,table
            mov es,ax
            mov si,0
            mov bx,0
            mov di,0
            mov cx,21
s0:            mov ax,[bx]               
            mov es:[si],ax
            mov ax,[bx+2]            
            mov es:[si+2],ax   
            
            mov ax,[bx+84]
            mov es:[si+5],ax
            mov dx,[bx+86]
            mov es:[si+7],dx
            
            div word ptr [168+di]
            mov es:[si+13],ax
            
            mov ax,[168+di]
            mov es:[si+10],ax
            
            add di,2
            add si,10h
            add bx,4
            loop s0
            
            
;准备阶段
;将数据转换为ASC码格式
;存储在fruit段

            mov ax,table
            mov ds,ax               
            mov dh,3                ;dh代表行号(0~24)
            mov dl,3                ;dl代表列号(0~79)
            mov al,160
            mul dh                    ;相乘得出行地址存在ax
            mov bx,ax                ;ax后面用到,转移到bx
            mov al,2
            mul dl                    ;相乘得出列地址存在ax
            add bx,ax                ;行列相加得到真正地址,存放在bx
            mov bp,0
            mov cx,21
            
            
s1:            push cx
            push bx
            mov ax,fruit
            mov es,ax
            mov si,0
            mov di,0
            mov ax,0
            mov dx,0
            
            mov ax,ds:[bp+di]        ;将年份放进目标段
            mov es:[si],ax
            mov ax,ds:[bp+di].2
            mov es:[si].2,ax   
            add si,6
            add di,5
            
            
            mov ax,ds:[bp+di]        ;将总金额放进目标段
            mov dx,ds:[bp+di].2   
            call dtoc
            add si,10
            add di,5
            
            mov ax,ds:[bp+di]        ;将人数放进目标段
            mov dx,0
            call dtoc
            add si,6
            add di,3
            
            mov ax,ds:[bp+di]        ;将人均金额放进目标段
            mov dx,0
            call dtoc
            
            
;打印输出阶段            
            
            mov ax,fruit            ;段地址切换
            mov ds,ax
            mov ax,0b800h
            mov es,ax
            
            mov si,0                ;循环实现0转换为空格,并以0结尾
            mov cx,29
a:            push cx
            mov cl,[si]            
            jcxz b
c:            inc si
            pop cx
            loop a
            mov byte ptr [si],0
b:            mov byte ptr [si],20h   
            jmp shor c
            
            
            mov si,0
            call show_str
            
            
            
            
            pop bx
            pop cx
            add bx,0a0h                ;转移到下一行显存
            add bp,0ah                ;table段切换到下一行
            loop s1

            mov ax,4c00h
            int 21h

            
            
            
            

dtoc:        push ax
            push bx
            push cx
            push dx
            push si
            push di
            mov di,0
            mov cx,ax
            jcxz short s3            ;低位为0,跳转到s3判断
            mov cx,0ah
s2:            call divdw                ;引用实验十(2)除法模块
            add cx,30h
            push cx            
            inc di
            jmp short dtoc
s3:            mov cx,dx
            jcxz s4                    ;高低位均位0,结束
            jmp short s2
s4:            mov cx,di
s5:            pop ax
            mov es:[si],al
            inc si
            loop s5
            pop    di
            pop si
            pop dx
            pop cx
            pop bx
            pop ax
            ret
   
   
;名称:divdw
;功能:进行不会产生溢出的除法运算,被除数为dword型,除数为word型,结果为dword型。
;参数:(ax)=dword型数据的低16位;
;      (dx)=dword型数据的高16位;
;      (cx)=除数。
;返回:(dx)=结果的高16位;
;      (ax)=结果的低16位;
;      (cx)=余数。   
        
divdw:        push di
            push ax                ;ax后面做除法要用到,暂存到栈
            mov ax,dx            
            mov dx,0            ;被除数高位为0,低位为H
            div cx
            mov di,ax            ;商暂存
            pop ax                ;取出L,此时高位为H/N的余数,低位为L
            div cx
            mov cx,dx            ;余数
            mov dx,di            ;商高位
            pop di
            ret   
            
   
show_str:    mov al,2
            mov ch,0
            
d1:            mov cl,[si]
            jcxz q
            mov dl,ds:[si]
            mov es:[bx],dl            ;字符
            mov es:[bx].1,al        ;颜色
            inc si                    ;存放顺序为倒序,自减一
            add bx,2

            loop d1
q:            ret                    
            
            
        

code ends

end start   



最佳答案
2017-3-21 20:38:46
  1. assume cs:code,ds:data,es:table

  2. data segment
  3.     db '1975','1976','1977','1978','1979','1980','1981','1982','1983'

  4.     db '1984','1985','1986','1987','1988','1989','1990','1991','1992'

  5.     db '1993','1994','1995'

  6.     dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514

  7.     dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000

  8.     dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226

  9.     dw 11452,14430,15257,17800
  10. data ends

  11. table segment
  12.     db 21 dup ('year summ ne ?? ')
  13. table ends

  14. fruit segment
  15.         db 32 dup(0)
  16. fruit ends

  17. code segment
  18.        

  19. ;初始化阶段
  20. ;将原始数据整理放到table处
  21. ;套用实验七的程序加以修改

  22. start:                mov ax,data
  23.                         mov ds,ax
  24.                         mov ax,table
  25.                         mov es,ax
  26.                         mov si,0
  27.                         mov bx,0
  28.                         mov di,0
  29.                         mov cx,21
  30. s0:                        mov ax,[bx]                               
  31.                         mov es:[si],ax
  32.                         mov ax,[bx+2]                       
  33.                         mov es:[si+2],ax       
  34.                        
  35.                         mov ax,[bx+84]
  36.                         mov es:[si+5],ax
  37.                         mov dx,[bx+86]
  38.                         mov es:[si+7],dx
  39.                        
  40.                         div word ptr [168+di]
  41.                         mov es:[si+13],ax
  42.                        
  43.                         mov ax,[168+di]
  44.                         mov es:[si+10],ax
  45.                        
  46.                         add di,2
  47.                         add si,10h
  48.                         add bx,4
  49.                         loop s0
  50.                        
  51.                        
  52. ;准备阶段
  53. ;将数据转换为ASC码格式
  54. ;存储在fruit段

  55.                         mov ax,table
  56.                         mov ds,ax                               
  57.                         mov dh,3                                ;dh代表行号(0~24)
  58.                         mov dl,3                                ;dl代表列号(0~79)
  59.                         mov al,160
  60.                         mul dh                                        ;相乘得出行地址存在ax
  61.                         mov bx,ax                                ;ax后面用到,转移到bx
  62.                         mov al,2
  63.                         mul dl                                        ;相乘得出列地址存在ax
  64.                         add bx,ax                                ;行列相加得到真正地址,存放在bx
  65.                         mov bp,0
  66.                         mov cx,21
  67.                        
  68.                        
  69. s1:                        push cx
  70.                         push bx
  71.                         mov ax,fruit
  72.                         mov es,ax
  73.                         mov si,0
  74.                         mov di,0
  75.                         mov ax,0
  76.                         mov dx,0
  77.                        
  78.                         mov ax,ds:[bp+di]                ;将年份放进目标段
  79.                         mov es:[si],ax
  80.                         ;mov ax,ds:[bp+di].2 ;  我没有见过这种写法
  81.                         ;mov es:[si].2,ax       
  82.                         add si,6
  83.                         add di,5
  84.                        
  85.                        
  86.                         mov ax,ds:[bp+di]                ;将总金额放进目标段
  87.                         ;mov dx,ds:[bp+di].2       
  88.                         call dtoc
  89.                         add si,10
  90.                         add di,5
  91.                        
  92.                         mov ax,ds:[bp+di]                ;将人数放进目标段
  93.                         mov dx,0
  94.                         call dtoc
  95.                         add si,6
  96.                         add di,3
  97.                        
  98.                         mov ax,ds:[bp+di]                ;将人均金额放进目标段
  99.                         mov dx,0
  100.                         call dtoc
  101.                        
  102.                        
  103. ;打印输出阶段                       
  104.                        
  105.                         mov ax,fruit                        ;段地址切换
  106.                         mov ds,ax
  107.                         mov ax,0b800h
  108.                         mov es,ax
  109.                        
  110.                         mov si,0                                ;循环实现0转换为空格,并以0结尾
  111.                         mov cx,29
  112. a:                        push cx
  113.                         mov cl,[si]                       
  114.                         jcxz b
  115. ;不要用标号c                       
  116. c1:                        inc si
  117.                         pop cx
  118.                         loop a
  119.                         mov byte ptr [si],0
  120. b:                        mov byte ptr [si],20h       
  121.                         jmp short c1
  122.                        
  123.                        
  124.                         mov si,0
  125.                         call show_str
  126.                        
  127.                        
  128.                        
  129.                        
  130.                         pop bx
  131.                         pop cx
  132.                         add bx,0a0h                                ;转移到下一行显存
  133.                         add bp,0ah                                ;table段切换到下一行
  134.                         loop s1

  135.                         mov ax,4c00h
  136.                         int 21h

  137.                        
  138.                        
  139.                        
  140.                        

  141. dtoc:                push ax
  142.                         push bx
  143.                         push cx
  144.                         push dx
  145.                         push si
  146.                         push di
  147.                         mov di,0
  148.                         mov cx,ax
  149.                         jcxz short s3                        ;低位为0,跳转到s3判断
  150.                         mov cx,0ah
  151. s2:                        call divdw                                ;引用实验十(2)除法模块
  152.                         add cx,30h
  153.                         push cx                       
  154.                         inc di
  155.                         jmp short dtoc
  156. s3:                        mov cx,dx
  157.                         jcxz s4                                        ;高低位均位0,结束
  158.                         jmp short s2
  159. s4:                        mov cx,di
  160. s5:                        pop ax
  161.                         mov es:[si],al
  162.                         inc si
  163.                         loop s5
  164.                         pop        di
  165.                         pop si
  166.                         pop dx
  167.                         pop cx
  168.                         pop bx
  169.                         pop ax
  170.                         ret
  171.        
  172.        
  173. ;名称:divdw
  174. ;功能:进行不会产生溢出的除法运算,被除数为dword型,除数为word型,结果为dword型。
  175. ;参数:(ax)=dword型数据的低16位;
  176. ;      (dx)=dword型数据的高16位;
  177. ;      (cx)=除数。
  178. ;返回:(dx)=结果的高16位;
  179. ;      (ax)=结果的低16位;
  180. ;      (cx)=余数。       
  181.                
  182. divdw:                push di
  183.                         push ax                                ;ax后面做除法要用到,暂存到栈
  184.                         mov ax,dx                       
  185.                         mov dx,0                        ;被除数高位为0,低位为H
  186.                         div cx
  187.                         mov di,ax                        ;商暂存
  188.                         pop ax                                ;取出L,此时高位为H/N的余数,低位为L
  189.                         div cx
  190.                         mov cx,dx                        ;余数
  191.                         mov dx,di                        ;商高位
  192.                         pop di
  193.                         ret       
  194.                        
  195.        
  196. show_str:        mov al,2
  197.                         mov ch,0
  198.                        
  199. d1:                        mov cl,[si]
  200.                         jcxz q
  201.                         mov dl,ds:[si]
  202.                         mov es:[bx],dl                        ;字符
  203.                         ;mov es:[bx].1,al                ;颜色
  204.                         inc si                                        ;存放顺序为倒序,自减一
  205.                         add bx,2

  206.                         loop d1
  207. q:                        ret                                       
  208.                        
  209.                        
  210.                

  211. code ends

  212. end start       
复制代码

错误提示

错误提示

设计1.zip

1.84 KB, 下载次数: 1

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

使用道具 举报

 楼主| 发表于 2017-3-21 20:14:12 | 显示全部楼层
求各位大佬帮帮吗!!!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-21 20:38:46 | 显示全部楼层    本楼为最佳答案   
  1. assume cs:code,ds:data,es:table

  2. data segment
  3.     db '1975','1976','1977','1978','1979','1980','1981','1982','1983'

  4.     db '1984','1985','1986','1987','1988','1989','1990','1991','1992'

  5.     db '1993','1994','1995'

  6.     dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514

  7.     dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000

  8.     dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226

  9.     dw 11452,14430,15257,17800
  10. data ends

  11. table segment
  12.     db 21 dup ('year summ ne ?? ')
  13. table ends

  14. fruit segment
  15.         db 32 dup(0)
  16. fruit ends

  17. code segment
  18.        

  19. ;初始化阶段
  20. ;将原始数据整理放到table处
  21. ;套用实验七的程序加以修改

  22. start:                mov ax,data
  23.                         mov ds,ax
  24.                         mov ax,table
  25.                         mov es,ax
  26.                         mov si,0
  27.                         mov bx,0
  28.                         mov di,0
  29.                         mov cx,21
  30. s0:                        mov ax,[bx]                               
  31.                         mov es:[si],ax
  32.                         mov ax,[bx+2]                       
  33.                         mov es:[si+2],ax       
  34.                        
  35.                         mov ax,[bx+84]
  36.                         mov es:[si+5],ax
  37.                         mov dx,[bx+86]
  38.                         mov es:[si+7],dx
  39.                        
  40.                         div word ptr [168+di]
  41.                         mov es:[si+13],ax
  42.                        
  43.                         mov ax,[168+di]
  44.                         mov es:[si+10],ax
  45.                        
  46.                         add di,2
  47.                         add si,10h
  48.                         add bx,4
  49.                         loop s0
  50.                        
  51.                        
  52. ;准备阶段
  53. ;将数据转换为ASC码格式
  54. ;存储在fruit段

  55.                         mov ax,table
  56.                         mov ds,ax                               
  57.                         mov dh,3                                ;dh代表行号(0~24)
  58.                         mov dl,3                                ;dl代表列号(0~79)
  59.                         mov al,160
  60.                         mul dh                                        ;相乘得出行地址存在ax
  61.                         mov bx,ax                                ;ax后面用到,转移到bx
  62.                         mov al,2
  63.                         mul dl                                        ;相乘得出列地址存在ax
  64.                         add bx,ax                                ;行列相加得到真正地址,存放在bx
  65.                         mov bp,0
  66.                         mov cx,21
  67.                        
  68.                        
  69. s1:                        push cx
  70.                         push bx
  71.                         mov ax,fruit
  72.                         mov es,ax
  73.                         mov si,0
  74.                         mov di,0
  75.                         mov ax,0
  76.                         mov dx,0
  77.                        
  78.                         mov ax,ds:[bp+di]                ;将年份放进目标段
  79.                         mov es:[si],ax
  80.                         ;mov ax,ds:[bp+di].2 ;  我没有见过这种写法
  81.                         ;mov es:[si].2,ax       
  82.                         add si,6
  83.                         add di,5
  84.                        
  85.                        
  86.                         mov ax,ds:[bp+di]                ;将总金额放进目标段
  87.                         ;mov dx,ds:[bp+di].2       
  88.                         call dtoc
  89.                         add si,10
  90.                         add di,5
  91.                        
  92.                         mov ax,ds:[bp+di]                ;将人数放进目标段
  93.                         mov dx,0
  94.                         call dtoc
  95.                         add si,6
  96.                         add di,3
  97.                        
  98.                         mov ax,ds:[bp+di]                ;将人均金额放进目标段
  99.                         mov dx,0
  100.                         call dtoc
  101.                        
  102.                        
  103. ;打印输出阶段                       
  104.                        
  105.                         mov ax,fruit                        ;段地址切换
  106.                         mov ds,ax
  107.                         mov ax,0b800h
  108.                         mov es,ax
  109.                        
  110.                         mov si,0                                ;循环实现0转换为空格,并以0结尾
  111.                         mov cx,29
  112. a:                        push cx
  113.                         mov cl,[si]                       
  114.                         jcxz b
  115. ;不要用标号c                       
  116. c1:                        inc si
  117.                         pop cx
  118.                         loop a
  119.                         mov byte ptr [si],0
  120. b:                        mov byte ptr [si],20h       
  121.                         jmp short c1
  122.                        
  123.                        
  124.                         mov si,0
  125.                         call show_str
  126.                        
  127.                        
  128.                        
  129.                        
  130.                         pop bx
  131.                         pop cx
  132.                         add bx,0a0h                                ;转移到下一行显存
  133.                         add bp,0ah                                ;table段切换到下一行
  134.                         loop s1

  135.                         mov ax,4c00h
  136.                         int 21h

  137.                        
  138.                        
  139.                        
  140.                        

  141. dtoc:                push ax
  142.                         push bx
  143.                         push cx
  144.                         push dx
  145.                         push si
  146.                         push di
  147.                         mov di,0
  148.                         mov cx,ax
  149.                         jcxz short s3                        ;低位为0,跳转到s3判断
  150.                         mov cx,0ah
  151. s2:                        call divdw                                ;引用实验十(2)除法模块
  152.                         add cx,30h
  153.                         push cx                       
  154.                         inc di
  155.                         jmp short dtoc
  156. s3:                        mov cx,dx
  157.                         jcxz s4                                        ;高低位均位0,结束
  158.                         jmp short s2
  159. s4:                        mov cx,di
  160. s5:                        pop ax
  161.                         mov es:[si],al
  162.                         inc si
  163.                         loop s5
  164.                         pop        di
  165.                         pop si
  166.                         pop dx
  167.                         pop cx
  168.                         pop bx
  169.                         pop ax
  170.                         ret
  171.        
  172.        
  173. ;名称:divdw
  174. ;功能:进行不会产生溢出的除法运算,被除数为dword型,除数为word型,结果为dword型。
  175. ;参数:(ax)=dword型数据的低16位;
  176. ;      (dx)=dword型数据的高16位;
  177. ;      (cx)=除数。
  178. ;返回:(dx)=结果的高16位;
  179. ;      (ax)=结果的低16位;
  180. ;      (cx)=余数。       
  181.                
  182. divdw:                push di
  183.                         push ax                                ;ax后面做除法要用到,暂存到栈
  184.                         mov ax,dx                       
  185.                         mov dx,0                        ;被除数高位为0,低位为H
  186.                         div cx
  187.                         mov di,ax                        ;商暂存
  188.                         pop ax                                ;取出L,此时高位为H/N的余数,低位为L
  189.                         div cx
  190.                         mov cx,dx                        ;余数
  191.                         mov dx,di                        ;商高位
  192.                         pop di
  193.                         ret       
  194.                        
  195.        
  196. show_str:        mov al,2
  197.                         mov ch,0
  198.                        
  199. d1:                        mov cl,[si]
  200.                         jcxz q
  201.                         mov dl,ds:[si]
  202.                         mov es:[bx],dl                        ;字符
  203.                         ;mov es:[bx].1,al                ;颜色
  204.                         inc si                                        ;存放顺序为倒序,自减一
  205.                         add bx,2

  206.                         loop d1
  207. q:                        ret                                       
  208.                        
  209.                        
  210.                

  211. code ends

  212. end start       
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-22 09:52:28 | 显示全部楼层

可以帮忙看看我的代码哪里有错误吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-22 19:28:11 | 显示全部楼层
风在飘 发表于 2017-3-22 09:52
可以帮忙看看我的代码哪里有错误吗

可以先整理一下你的代码吗
你的代码太乱了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-1 06:04

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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