z827901654 发表于 2020-1-10 01:39:59

王爽汇编语言实验7问题求助

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:
        mov ,al
        add si,1
        loop s0
       
        pop cx       
        add bx,10h
        loop s

    mov bx,0
    mov cx,21
s1:
    mov ax,es:
        mov ,ax
        add si,2
        mov ax,es:
        mov ,ax
        add si,2
        add bx,10h
        loop s1

    mov bx,0
    mov cx,21
s2:
        mov ax,es:           
        mov ,ax
        add bx,10h
        loop s2
       
        mov bx,0
        mov cx,21
s3:
        mov ax,
        mov dx,
        div word ptr
        mov ,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:
        mov ,al
        add si,1
        mov al,es:
        mov ,al
        add si,1
        mov al,es:
        mov ,al
        add si,1
        mov al,es:
        mov ,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:
        ;mov        , al                ; 这里bx不能加si
        mov        , 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:
        mov        , ax
        add        si, 2
        mov        ax, es:
        mov        , ax
        add        si, 2
        add        bx, 10h
        loop        s1
       
        mov        bx, 0
        mov        cx, 21
s2:
        mov        ax, es:
        mov        , ax
        add        si, 2                        ; 这里忘记加si了
        add        bx, 10h
        loop        s2
       
        mov        bx, 0
        mov        cx, 21
s3:
        mov        ax,
        mov        dx,
        div        word ptr
        mov        , ax
        add        bx, 10h
        loop        s3

        mov        ax, 4c00h
        int        21h
codesg ends
end start

z827901654 发表于 2020-1-10 17:04:08

人造人 发表于 2020-1-10 13:17
大概看了一下结果,应该是没有问题了,我没有认真检查结果

太谢谢您了!!!!!!!!!!!!!!!!!!!!!我思考了好久,没想到是寄存器搞混了,终于能睡个好觉了!!!!!!!!!!!!!!!

人造人 发表于 2020-1-10 17:21:23

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

思考半天也不如调试一遍,学会调试程序

z827901654 发表于 2020-1-10 17:24:44

人造人 发表于 2020-1-10 17:21
思考半天也不如调试一遍,学会调试程序

好!少了一点一步一步调试的耐心,我的。

zwhe 发表于 2020-6-3 16:27:40

{:10_334:}
页: [1]
查看完整版本: 王爽汇编语言实验7问题求助