1. 程式人生 > >匯編課程設計

匯編課程設計

cal add dword sta bsp 定義 codes 格式化 click

技術分享
assume cs:codesg,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
       ;以上是表示21年的21個字符串

       dd 16,22,382,1356,2390,8000,16000,24486,50065,97479
,140417,197514 dd 245980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000 ;以上是表示21年公司總收入的21個dword型數據 dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226 dw 11542,14430,15257,17800 ;以上是表示21年公司雇員人數的21個word型數據 data ends table segment db 21 dup (year summ ne ??
) table ends stack segment dw 32 dup (0) stack ends buffer segment db 32 dup (0) buffer ends codesg segment start: mov ax,data mov ds,ax mov di,0 mov si,4*21+4*21 ;指向員工 mov ax,table mov es,ax ;es存表 mov bx,0 call finishing ;將data段格式化到es段了 mov ax,stack mov ss,ax mov sp,
64 mov ax,buffer ;數據緩沖區,接受轉換後的每一個字符 mov ds,ax mov si,0 ;ds:si指向緩沖區 mov ax,table mov es,ax mov bx,0 ;ex:bx指向table mov dh,5 ;第一行 mov cx,21 s: push cx mov ax,es:[bx] mov ds:[si],ax mov ax,es:[bx+2] mov ds:[si+2],ax ;向緩沖區中寫入一條年信息 mov byte ptr ds:[si+4],0 mov dl,20 ;顯示年份 mov cl,2 call show_str push dx mov ax,es:[bx+5] ;讀取一條總收入信息 mov dx,es:[bx+7] call dtoc ;調用dtoc將數值轉換成字符串到緩沖區中 pop dx mov dl,30 ;顯示員工 call show_str push dx mov ax,es:[bx+0ah] ;讀取一條總人數信息 mov dx,0 call dtoc ;調用dtoc將數值轉換成字符串到buffer中 pop dx mov dl,40 ;顯示字符串 call show_str push dx mov ax,es:[bx+0dh] ;讀取一條人均收入信息 mov dx,0 call dtoc ;調用dtoc將數值轉換成字符串到buffer中 pop dx mov dl,50 ;顯示字符串 call show_str add dh,2 ;每隔一行打印一條數據 add bx,10h ;讓es:bx指向table的下一行數據 pop cx loop s mov ax,4c00h int 21h dtoc: push ax push bx push cx push dx push bp push si mov bp,0 dtoc_s0: mov cx,10d call divdw push cx inc bp mov cx,ax ;除到商為0為止 inc cx loop dtoc_s0 mov cx,bp dtoc_s: pop bx add bl,30h mov ds:[si],bl inc si loop dtoc_s mov byte ptr ds:[si],0 pop si pop bp pop dx pop cx pop bx pop ax ret divdw: ;子程序定義開始 push bx push ax mov ax,dx mov dx,0 div cx mov bx,ax pop ax div cx mov cx,dx mov dx,bx pop bx ret show_str: push ax push bx push cx push dx push es push bp push si mov ax,0b800H mov es,ax mov al,80*2 ;一行160個字節 mul dh ;剛開始是第五行;高位是行,低位是列 mov dh,0 add ax,dx ;列數*2 add ax,dx mov bp,ax mov al,cl ;顏色 mov cx,0 mov cl,ds:[si] ;ds:[si]為緩沖區指針 inc si show_str_s: mov es:[bp],cl ;低位ascii inc bp mov es:[bp],al ;高位屬性 inc bp mov cl,ds:[si] ;如果這個字節是0,退出循環 inc si inc cx loop show_str_s pop si pop bp pop es pop dx pop cx pop bx pop ax ret finishing: push ax push bx push cx push di push si push bp mov cx,21 finishing_s: ;填充時間 mov ax,ds:[di] mov es:[bx],ax mov ax,ds:[di+2] mov es:[bx+2],ax ;填充收入,收入是雙字節的 mov ax,ds:[di+4*21] mov dx,ds:[di+4*21+2] ;高位 mov es:[bx+5],ax mov es:[bx+5+2],dx ;填充人數 mov bp,ds:[si] mov es:[bx+0aH],bp ;填充人均收入 div bp mov es:[bx+0dH],ax add bx,16 ;table換一行 add di,4 ;年份換一個 add si,2 ;員工修改兩個字節 loop finishing_s pop bp pop si pop di pop cx pop bx pop ax ret codesg ends end start
View Code

匯編課程設計