assume cs:code,ds:databuf segment
db 0a0h dup (' '),0
buf ends
data segment
db '1975','1976','1977','1978','1979','1980','1981','1982','1983','1984'
db '1985','1986','1987','1988','1989','1990','1991','1992','1993','1994'
db '1995'
;以上表示21年的21個字串
dd 16,22,382,1356,2390,8000,16000,24486,50065,97479
dd 140417,197514,345980,590827,803530,1183000,1843000,2759000,3753000,4649000
dd 5937000
;以上表示21年公司總收入的21個dword型資料
dw 3,7,9,13,28,38,130,220,476,778
dw 1001,1442,2258,2793,4037,5635,8226,11542,14430,15257
dw 17800
;以上是表示21年公司雇員人數的21個word型資料
data ends
table segment
db 21 dup ('year summ ne ?? '),0
table ends
code segment
main:
mov ax,table
mov ds,ax
mov ax,data
mov es,ax
mov si,0
mov di,0
call copy
mov ax,buf
mov ds,ax
mov ax,table
mov es,ax
mov bl,2
mov cx,21
s2: mov ax,es:[di]
mov [si],ax
mov ax,es:[di+2]
mov [si+2],ax
mov al,es:[di+4]
mov [si+4],al
mov ax,es:[di+5]
mov dx,es:[di+7]
add si,5
call dtoc
mov ax,es:[di+10]
xor dx,dx
add si,11
call dtoc
mov ax,es:[di+13]
xor dx,dx
add si,6
call dtoc
xor si,si
mov dh,bl
mov dl,2
push cx
mov cl,2
add di,10h
call show_str
pop cx
inc bl
loop s2
mov ax,4c00h
int 21h
copy:
push ax
push bx
push cx
push dx
push si
push di
xor bx,bx
mov cx,21
s1: ;年份
mov ax,es:[bx+di]
mov [si],ax
mov ax,es:[bx+di].2
mov [si].2,ax
;總收入
mov ax,es:84[bx+di]
mov [si].5,ax
mov dx,es:84[bx+di].2
mov [si].7,dx
;平均收入
div word ptr es:168[di]
mov [si].13,ax
;人數mov ax,es:168[di]
mov [si].10,ax
xor al,al
;mov [si+0fh],al
add bx,2
add di,2
add si,10h
loop s1
pop di
pop si
pop dx
pop cx
pop bx
pop ax
ret;名稱: show_str
;功能: 在指定的位置,用指定的顏色,顯示乙個用0結尾的字串
;引數: (dh)=行號(取值範圍0-24),(dl)=列號(取值範圍0-79),(cl)=顏色
; ds:si指向字串的首位址
;返回: 無
show_str:
push ax
push bx
push cx
push dx
push es
push si
push di
mov ax,0b800h
mov es,ax
mov al,0a0h ;行長度
mul dh
mov bx,ax ;行位址
xor dh,dh
mov di,dx
add di,dx ;列位址
mov al,cl ;屬性
do: mov cl,[si]
mov ch,0
jcxz enddo
mov ch,al;屬性
mov es:[bx][di],cx
inc si
add di,2
jmp short do
enddo:
pop di
pop si
pop es
pop dx
pop cx
pop bx
pop ax
ret;名稱: dtoc
;功能: 將word型資料轉變為表示十進位制數的字串,字串以0為結尾符
;返回: 無
dtoc:
push ax
push cx
push dx
push si
push di
do1:
mov cx,10
call divdw
;(ax)=結果的低16位,(dx)=結果的高16位,(cx)=餘數
add cx,30h
mov [si],cl
inc si
mov cx,ax
or cx,dx
jcxz enddo1
jmp short do1
enddo1:
;mov byte ptr [si],0
mov bp,sp
mov di,[bp+2]
mov cx,si
sub cx,di
shr cx,1
jcxz s3
dec si
s: xchg dl,[si]
xchg dl,[di]
xchg dl,[si]
dec si
inc di
loop s
s3: pop di
pop si
pop dx
pop cx
pop ax
ret;名稱: divdw
;引數: (ax)=dword型資料的低16位,(dx)=dword型資料的高16位
; (cx)=除數
;返回: (ax)=結果的低16位,(dx)=結果的高16位
; (cx)=餘數
divdw:
push bp
mov bp,sp
sub bp,6
mov [bp],ax
mov [bp+2],dx
mov ax,[bp+2]
xor dx,dx
div cx
mov [bp+4],ax
mov ax,[bp]
div cx
mov cx,dx
mov dx,[bp+4]
pop bp
retcode ends
end main
王爽《組合語言》課程設計1
注 dtoc 1子程式較實驗十中dtoc有如下不同 1.運算元據範圍由0 ffffh變為0 ffffffffh 2.向ds si指向的字串寫入資料後不會新增數字0 方便後面 如下 assume cs codesg datasg segment db 1975 1976 1977 1978 1979 ...
組合語言 王爽
cpu有三條匯流排 位址 資料 控制線 位址匯流排確定儲存單元 控制匯流排傳送指令 資料匯流排 傳輸資料 cpu n個位址線 位址匯流排寬度為n 可以尋找2 n個記憶體單元 儲存單元 0開始編號,乙個儲存單元可以儲存乙個byte 8086cpu有16根位址線 1bit就是一根位址線 注意 儲存器以b...
組合語言 《組合語言》王爽 實驗一
從 1000 0 開始寫入命令 a 1000 0 mov ax,4e20 add ax,1416 mov bx,2000 add ax,bx mov bx,ax add ax,bx mov ax,001a mov bx,0026 add al,bl add ah,bl add bh,al mov a...