|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
这个是我的答案:发生了死循环
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';84(0~53H)
;21年的21个字符串
dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514
dd 345980,590827,803530,1183000,1843000,2759000,3753000.4649000,5937000
;21年公司总收入的21个dword型数据;84(54H~0A7H)
dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226;84;错误是42,前面一共210
dw 11542,14430,15257,17800;(0A8H~0D1H)
;21年雇佣人数的21个word型数据
data ENDS
;存放数据
table segment
db 21 dup('year summ ne ?? ')
table ENDS
code segment
start: mov ax,data
mov ds,ax
mov ax,table
mov es,ax
mov bx,0 ;控制行
mov si,0 ;控制双字型数据
mov di,0 ;控制字型数据
mov cx,21
s: mov ax,[si];年份
mov dx,[si+2]
mov es:[bx],ax
mov es:[bx+2],dx;输入年份
mov ax,[si+84];工资
mov dx,[si+86]
mov es:[bx+5],ax
mov es:[bx+7],dx
div word ptr ds:[di+168]
mov word ptr es:[bx+13],ax
mov ax,[di+168];人数
mov es:[bx+10],ax;输入人数
add bx,16
add si,4
add di,2
loop s
mov ax,4C00H
int 21H
code ends
end start
这个是参考答案:正常运行
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
code segment
start:  mov ax,data
        mov ds,ax
        mov ax,table
        mov es,ax
        mov bx,0 ;控制双字型
        mov si,0 ;控制行
        mov di,0 ;控制字型
        mov cx,21
s:      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 ds:[di].168
        mov es:[si].13,ax
       
        mov ax,[di].168
        mov es:[si].10,ax
        add di,2
        add bx,4
        add si,16
        loop s
        mov ax,4c00h
        int 21h
code ends
end start
本帖最后由 jackz007 于 2024-8-10 23:17 编辑
这里有错误:
dd 345980,590827,803530,1183000,1843000,2759000,3753000.4649000,5937000
红颜色的句点应该是一个逗号。
只要改掉这个错误,这个代码没有任何的问题。如果说改进,那么,最需要改进的地方是应该为代码添加堆栈段 assume cs:code,ds:data,es:table
stack segment stack ; 添加
db 400H dup(0) ;添加
stack ends ; 添加
data segment
. . . . . .
|
|