王爽 汇编 课设1
使用temp空间来暂存每一行要显示的字符, 然后调用show_str子程序 进行显示 外层21次循环 难点:dd段的数字太大,无法简单进行除10存储, 需要借助div_d 大除法的子程序(更改的), assume cs:code,ds:table,ss:stack stack segment db 32 dup (0) stack ends table segment db 81 dup(0) ; temp空间 ; 81 * 1 = 81 byte 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 * 4 = 84 byte dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514 ; 12 dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000 ; 21 * 4 = 84 byte dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226 dw 11542,14430,15257,17800 ; 21 * 2 = 42 byte db 1,0,0,0,0 ; 循环的第几,年的第几,钱的第几,人的第几,当前temp空间的指向 ; 5 * 1 = 5 byte table ends code segment start: mov ax,stack mov ss,ax mov sp,32 mov ax,table ; 原始数据 mov ds,ax mov bx,0 ; 年的计数 mov cx,21 main_loop: push cx ; ds:[84+84+42+5] 是temp区域 ; =========== 年 =============== ; 显示4列 mov cx,4 mov bl,ds:[81+84+84+42][1] ; 年的字节在哪 mov bh,0 mov si,0 start_s1: mov dl, ds:81[bx] ; 记得跳过81byte mov ds:[si],dl inc bx inc si loop start_s1 mov al,4 mov ds:[81+84+84+42][4],al ; ================ 空格 ================= mov cx,4 ; 空格数量 ; mov dl,ds:[81+84+84+42][4] call add_space ; 存储空格 ; add dl,4 ; mov ds:[81+84+84+42][4],dl ; temp扩增了 ; =================== 收入 ================== ; 显示10列 mov bl,ds:[81+84+84+42][2] ; 收入的字节在哪 mov bh,0 mov ax,ds:[81+84][bx] mov dx,ds:[81+84][bx+2] mov bl,ds:[81+84+84+42][4] mov bh,0 mov si,bx ; 存到 ds:[....