鱼C论坛

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

[已解决]王爽汇编语言实验7问题求助

[复制链接]
发表于 2020-1-10 01:39:59 | 显示全部楼层 |阅读模式

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

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

x
  1. assume cs:codesg
  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 11542,14430,15257,17800
  10. data ends
  11. table segment
  12.     db 21 dup ('year sumn ne ?? ')
  13. table ends

  14. stack segment
  15.     dw 0,0,0,0,0,0,0,0
  16. stack ends

  17. codesg segment
  18. start:
  19.     mov ax,stack
  20.         mov ss,ax
  21.         mov sp,16
  22.        
  23.     mov ax,table
  24.         mov ds,ax
  25.         mov bx,0
  26.         mov ax,data
  27.         mov es,ax
  28.     mov si,0
  29.         mov cx,21

  30. s:
  31.         push cx
  32.        
  33.         mov cx,4
  34. s0:
  35.         mov al,es:[si]
  36.         mov [bx+si],al
  37.         add si,1
  38.         loop s0
  39.        
  40.         pop cx       
  41.         add bx,10h
  42.         loop s

  43.     mov bx,0
  44.     mov cx,21
  45. s1:
  46.     mov ax,es:[si]
  47.         mov [bx+5],ax
  48.         add si,2
  49.         mov ax,es:[si]
  50.         mov [bx+7],ax
  51.         add si,2
  52.         add bx,10h
  53.         loop s1

  54.     mov bx,0
  55.     mov cx,21
  56. s2:
  57.         mov ax,es:[si]             
  58.         mov [bx+10],ax
  59.         add bx,10h
  60.         loop s2
  61.        
  62.         mov bx,0
  63.         mov cx,21
  64. s3:
  65.         mov ax,[bx+5]
  66.         mov dx,[bx+7]
  67.         div word ptr [bx+10]
  68.         mov [bx+13],ax
  69.         add bx,10h
  70.         loop s3


  71.        mov ax,4c00h
  72.            int 21h
  73. codesg ends
  74. end start
复制代码

在s和s0循环结束时,si的值应该是84,但是每次都只有81。
以下是我尝试的结果:
1.debug单步跟踪的结果,外层循环s中的cx逐渐减为0,si增长到81就不再增加。
2.将所有si改成di,结果不变。
3.将外层循环s中的cx改成1-20,si显示的结果正确。
4.增加一个‘1996’字符串,外层循环s中cx仍为21,si显示出错,只能到81;将外层循环s中的cx改成1-20,si显示的结果正确。
5.去掉内层s0循环,将代码改成
        mov al,es:[si]
        mov [bx+si],al
        add si,1
        mov al,es:[si]
        mov [bx+si],al
        add si,1
        mov al,es:[si]
        mov [bx+si],al
        add si,1
        mov al,es:[si]
        mov [bx+si],al
        add si,1
si结果依旧出错,但是显示为83。
在此种代码下,将外层循环s中的cx改成1-20,si显示正确。
求助:问题出在哪里~
       
最佳答案
2020-1-10 13:17:50
大概看了一下结果,应该是没有问题了,我没有认真检查结果

  1. assume cs:codesg

  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 11542, 14430, 15257, 17800
  10. data ends

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

  14. stack segment
  15.         dw 0, 0, 0, 0, 0, 0, 0, 0
  16. stack ends

  17. codesg segment
  18. start:
  19.         mov        ax, stack
  20.         mov        ss, ax
  21.         mov        sp, 16

  22.         mov        ax, table
  23.         mov        ds, ax
  24.         mov        ax, data
  25.         mov        es, ax
  26.         mov        bx, 0
  27.         mov        si, 0
  28.         mov        cx, 21
  29. s:
  30.         push        cx
  31.         mov        cx, 4
  32.         mov        di, 0
  33. s0:
  34.         mov        al, es:[si]
  35.         ;mov        [bx + si], al                ; 这里bx不能加si
  36.         mov        [bx + di], al
  37.         add        si, 1
  38.         add        di, 1
  39.         loop        s0

  40.         add        bx, 10h
  41.         pop        cx
  42.         loop        s

  43.         mov        bx, 0
  44.         mov        cx, 21
  45. s1:
  46.         mov        ax, es:[si]
  47.         mov        [bx + 5], ax
  48.         add        si, 2
  49.         mov        ax, es:[si]
  50.         mov        [bx + 7], ax
  51.         add        si, 2
  52.         add        bx, 10h
  53.         loop        s1
  54.        
  55.         mov        bx, 0
  56.         mov        cx, 21
  57. s2:
  58.         mov        ax, es:[si]
  59.         mov        [bx + 10], ax
  60.         add        si, 2                        ; 这里忘记加si了
  61.         add        bx, 10h
  62.         loop        s2
  63.        
  64.         mov        bx, 0
  65.         mov        cx, 21
  66. s3:
  67.         mov        ax, [bx + 5]
  68.         mov        dx, [bx + 7]
  69.         div        word ptr [bx + 10]
  70.         mov        [bx + 13], ax
  71.         add        bx, 10h
  72.         loop        s3

  73.         mov        ax, 4c00h
  74.         int        21h
  75. codesg ends
  76. end start
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-1-10 13:17:50 | 显示全部楼层    本楼为最佳答案   
大概看了一下结果,应该是没有问题了,我没有认真检查结果

  1. assume cs:codesg

  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 11542, 14430, 15257, 17800
  10. data ends

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

  14. stack segment
  15.         dw 0, 0, 0, 0, 0, 0, 0, 0
  16. stack ends

  17. codesg segment
  18. start:
  19.         mov        ax, stack
  20.         mov        ss, ax
  21.         mov        sp, 16

  22.         mov        ax, table
  23.         mov        ds, ax
  24.         mov        ax, data
  25.         mov        es, ax
  26.         mov        bx, 0
  27.         mov        si, 0
  28.         mov        cx, 21
  29. s:
  30.         push        cx
  31.         mov        cx, 4
  32.         mov        di, 0
  33. s0:
  34.         mov        al, es:[si]
  35.         ;mov        [bx + si], al                ; 这里bx不能加si
  36.         mov        [bx + di], al
  37.         add        si, 1
  38.         add        di, 1
  39.         loop        s0

  40.         add        bx, 10h
  41.         pop        cx
  42.         loop        s

  43.         mov        bx, 0
  44.         mov        cx, 21
  45. s1:
  46.         mov        ax, es:[si]
  47.         mov        [bx + 5], ax
  48.         add        si, 2
  49.         mov        ax, es:[si]
  50.         mov        [bx + 7], ax
  51.         add        si, 2
  52.         add        bx, 10h
  53.         loop        s1
  54.        
  55.         mov        bx, 0
  56.         mov        cx, 21
  57. s2:
  58.         mov        ax, es:[si]
  59.         mov        [bx + 10], ax
  60.         add        si, 2                        ; 这里忘记加si了
  61.         add        bx, 10h
  62.         loop        s2
  63.        
  64.         mov        bx, 0
  65.         mov        cx, 21
  66. s3:
  67.         mov        ax, [bx + 5]
  68.         mov        dx, [bx + 7]
  69.         div        word ptr [bx + 10]
  70.         mov        [bx + 13], ax
  71.         add        bx, 10h
  72.         loop        s3

  73.         mov        ax, 4c00h
  74.         int        21h
  75. codesg ends
  76. end start
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-1-10 17:04:08 | 显示全部楼层
人造人 发表于 2020-1-10 13:17
大概看了一下结果,应该是没有问题了,我没有认真检查结果

太谢谢您了!!!!!!!!!!!!!!!!!!!!!我思考了好久,没想到是寄存器搞混了,终于能睡个好觉了!!!!!!!!!!!!!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-1-10 17:21:23 | 显示全部楼层
z827901654 发表于 2020-1-10 17:04
太谢谢您了!!!!!!!!!!!!!!!!!!!!!我思考了好久,没想到是寄存器搞混了,终于能睡个 ...

思考半天也不如调试一遍,学会调试程序
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-1-10 17:24:44 | 显示全部楼层
人造人 发表于 2020-1-10 17:21
思考半天也不如调试一遍,学会调试程序

好!少了一点一步一步调试的耐心,我的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-3 16:27:40 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-25 07:59

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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