代码如下
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'
;21个字符串,每个字符串占四个字节,总长度为84字节,尾编号用十进制表示为83,16进制表示为53H
; data:0~data:53H
dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514
dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000
;21个双字型数据,共42个字,84个字节,尾编号用十进制表示为167,16进制表示为A7H
;data:54H~data:A7H
dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226
dw 11542,14430,15257,17800
;21个字型数据,共42个字节,尾编号用十进制表示为209,16进制表示为D1H
;data:A8H~data:D1H
data ends
table segment
db 21 dup ('year summ ne ?? ')
; 21行字符串,每行16个字节
table ends
codesg segment
start: mov ax,data
mov ds,ax
mov ax,table
mov es,ax
mov bx,0
mov si,0
; a循环解决了年份和紧随的空格问题,搞定了每行的0~4这5个编号的内容
mov cx,21
a: mov ax,[bx]
mov es:[si+0],ax
add bx,2
mov ax,[bx]
mov es:[si+2],ax
mov byte ptr es:[si+4],20H ;空格的ascii为20H
add bx,2
add si,16
loop a
mov bx,0
mov si,0
; b循环解决了收入和紧随的空格问题,搞定了每行的5~9这5个编号的内容
mov cx,21
b: mov ax,54H[bx]
mov es:[si+5],ax
add bx,2
mov ax,54H[bx]
mov es:[si+7],ax
mov byte ptr es:[si+9],20H ;空格的ascii为20H
add bx,2
add si,16
loop b
mov bx,0
mov si,0
; c循环解决了雇员和紧随的空格问题,搞定了每行的A、B、C这3个编号的内容
mov cx,21
c: mov ax,0A8H[bx]
mov es:[si+0AH],ax
; 记得吗,汇编语言中数据不能以字母开头,否则在这里AH到底是数据还是寄存器呢
mov byte ptr es:[si+0CH],20H
add bx,2
add si,16
loop c
mov bx,0
mov di,0
mov si,0
mov cx,21
; d循环解决了计算人均收入和紧随的空格问题,搞定了每行的D、E、F这3个编号的内容
d: mov ax,54H[bx]
add bx,2
mov dx,54H[bx]
add bx,2
div word ptr 0A8H[di]
add di,2
mov es:[si+0DH],ax
mov byte ptr es:[si+0FH],20H
add si,16
loop d
mov ax,4c00H
int 21H
codesg ends
end start
标签:汇编语言,mov,si,add,实验,es,ax,bx,王爽
From: https://blog.csdn.net/2301_81570594/article/details/142547604