在整个课程中,我们一共有两个课程设计,编写两个比较综合得程序,这是第一个。
任务:将实验7中得power idea公司得数据按照10.2所示得格式在屏幕上显示出来。
代码如下:进行讲解
assume cs:codesg,ds:data,ss:stack
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 (0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)
table ends
stack segment
dw 16 dup(0)
stack ends
codesg segment
start: mov ax,data 注:(这里开始,可以看我前面文章得单独讲解)
mov ds,ax
mov ax,stack
mov ss,ax
mov sp,32
mov ax,table
mov es,ax
mov cx,21
mov di,0
mov si,0
mov bx,0
mov dx,0
s: mov bp,0
mov ax,ds:[si+bp]
mov es:[bx+0],ax
mov ax,ds:[si+bp+2]
mov es:[bx+2],ax
add bp,84
mov ax,ds:[si+bp]
mov es:[bx+5],ax
mov ax,ds:[si+bp+2]
mov es:[bx+7],ax
add bp,84
mov ax,ds:[di+bp]
mov es:[bx+0ah],ax
mov ax,es:[bx+5]
mov dx,es:[bx+7]
div word ptr es:[bx+0ah]
mov es:[bx+0dh],ax
push bx
push si
push di
push cx
push es
push ds
call s0 注:(,主程序调用子程序,tables入完一行数据,把用得得寄存器保存到栈中。然后转移到s0标识处。)
pop ds 注:(返回得时候,在重新取出寄存器得内容,一次性循环)
pop es
pop cx
pop di
pop si
pop bx
add bx,16
add si,4
add di,2
loop s 注:(这里结束,可以看我前面文章得单独讲解)
mov ax,4c00h
int 21h
s0:mov ax,table 注:(这里新增把ds储存得数据,放到b800显存得缓冲区里面)
mov ds,ax 注:(重新赋值内存地址空间和初始化寄存器得值开始)
mov si,0
mov ah,0
mov di,0
mov bp,bx
mov ax,10
add bx,16
mul bx
mov bx,ax
add bx,4
mov ax,0b800h
mov es,ax
mov di,0
mov ah,0 注:(重新赋值内存地址空间和初始化寄存器得值结束)
s2:mov cl,ds:[bp+si] 注:(把年份得四个字节放入b800处开始,显示在屏幕上)
inc si
jcxz ok
mov es:[bx+di],cl
mov cl,2
mov es:[bx+di+1],cl
add di,2
jmp short s2 注:(把年份得四个字符串放入b800处结束)
ok:mov ax,ds:[bp+si] 注:(把收入得四个字节放入b800处开始,显示在屏幕上)
mov dx,ds:[bp+si+2]
mov si,0
call divdw 注:(调用子程序,然后结束)
mov ax,ds:[bp+10] 注:(把雇员数2个字节放入b800处开始,显示在屏幕上)
mov dx,0
mov si,0
call divdw 注:(调用子程序,然后结束)
mov ax,ds:[bp+13] 注:(把人均收入2个字节放入b800处开始,显示在屏幕上)
mov dx,0
mov si,0
call divdw 注:(调用子程序,然后结束)
ret 注:(这里整体结束 返回主程序继续循环)
divdw:mov cx,10 注:(divdw,是进行除法运算不会被溢出得公式)
push ax
mov ax,dx
mov dx,0
div cx
mov di,ax
pop ax
div cx
mov cx,dx
mov dx,di
push cx
mov cx,ax
inc si
jcxz ok2
jmp short divdw 注:(divdw结束)
ok2:add bx,48 注:(ok2,是把数据存放到b800处)
mov di,0
mov cx,si
s5:pop ax
mov ah,02
add al,30h
mov es:[bx+di],ax
add di,2
loop s5
ret 注:(ok2结束返回)
codesg ends
end start
在这里插入代码片
<h3>大家一起学习,有社么不懂得,可以私聊我。h3>