鱼C论坛

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

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

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

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

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

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

stack segment
    dw 0,0,0,0,0,0,0,0
stack ends

codesg segment
start:
    mov ax,stack
        mov ss,ax
        mov sp,16
        
    mov ax,table
        mov ds,ax
        mov bx,0
        mov ax,data
        mov es,ax
    mov si,0
        mov cx,21

s:
        push cx
        
        mov cx,4
s0:
        mov al,es:[si]
        mov [bx+si],al
        add si,1
        loop s0
        
        pop cx        
        add bx,10h
        loop s

    mov bx,0
    mov cx,21
s1:
    mov ax,es:[si]
        mov [bx+5],ax
        add si,2
        mov ax,es:[si]
        mov [bx+7],ax
        add si,2
        add bx,10h
        loop s1

    mov bx,0
    mov cx,21
s2:
        mov ax,es:[si]             
        mov [bx+10],ax
        add bx,10h
        loop s2
        
        mov bx,0
        mov cx,21
s3:
        mov ax,[bx+5]
        mov dx,[bx+7]
        div word ptr [bx+10]
        mov [bx+13],ax
        add bx,10h
        loop s3


       mov ax,4c00h
           int 21h
codesg ends
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
大概看了一下结果,应该是没有问题了,我没有认真检查结果
assume cs:codesg

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

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

stack segment
        dw 0, 0, 0, 0, 0, 0, 0, 0
stack ends

codesg segment
start:
        mov        ax, stack
        mov        ss, ax
        mov        sp, 16

        mov        ax, table
        mov        ds, ax
        mov        ax, data
        mov        es, ax
        mov        bx, 0
        mov        si, 0
        mov        cx, 21
s:
        push        cx
        mov        cx, 4
        mov        di, 0
s0:
        mov        al, es:[si]
        ;mov        [bx + si], al                ; 这里bx不能加si
        mov        [bx + di], al
        add        si, 1
        add        di, 1
        loop        s0

        add        bx, 10h
        pop        cx
        loop        s

        mov        bx, 0
        mov        cx, 21
s1:
        mov        ax, es:[si]
        mov        [bx + 5], ax
        add        si, 2
        mov        ax, es:[si]
        mov        [bx + 7], ax
        add        si, 2
        add        bx, 10h
        loop        s1
        
        mov        bx, 0
        mov        cx, 21
s2:
        mov        ax, es:[si]
        mov        [bx + 10], ax
        add        si, 2                        ; 这里忘记加si了
        add        bx, 10h
        loop        s2
        
        mov        bx, 0
        mov        cx, 21
s3:
        mov        ax, [bx + 5]
        mov        dx, [bx + 7]
        div        word ptr [bx + 10]
        mov        [bx + 13], ax
        add        bx, 10h
        loop        s3

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

使用道具 举报

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

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

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

stack segment
        dw 0, 0, 0, 0, 0, 0, 0, 0
stack ends

codesg segment
start:
        mov        ax, stack
        mov        ss, ax
        mov        sp, 16

        mov        ax, table
        mov        ds, ax
        mov        ax, data
        mov        es, ax
        mov        bx, 0
        mov        si, 0
        mov        cx, 21
s:
        push        cx
        mov        cx, 4
        mov        di, 0
s0:
        mov        al, es:[si]
        ;mov        [bx + si], al                ; 这里bx不能加si
        mov        [bx + di], al
        add        si, 1
        add        di, 1
        loop        s0

        add        bx, 10h
        pop        cx
        loop        s

        mov        bx, 0
        mov        cx, 21
s1:
        mov        ax, es:[si]
        mov        [bx + 5], ax
        add        si, 2
        mov        ax, es:[si]
        mov        [bx + 7], ax
        add        si, 2
        add        bx, 10h
        loop        s1
        
        mov        bx, 0
        mov        cx, 21
s2:
        mov        ax, es:[si]
        mov        [bx + 10], ax
        add        si, 2                        ; 这里忘记加si了
        add        bx, 10h
        loop        s2
        
        mov        bx, 0
        mov        cx, 21
s3:
        mov        ax, [bx + 5]
        mov        dx, [bx + 7]
        div        word ptr [bx + 10]
        mov        [bx + 13], ax
        add        bx, 10h
        loop        s3

        mov        ax, 4c00h
        int        21h
codesg ends
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-11-6 05:08

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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