1. 程式人生 > >彙編 實驗九

彙編 實驗九

程式碼:

 

; 在螢幕上輸出記憶體單元中的十進位制兩位數
assume cs:code, ds:data
data segment
db 12
db 0h,0h ; 前一個位元組用於儲存商,後一個位元組用於儲存餘數
data ends
code segment
start:
mov ax,data ; 補全指令,使得ds <-- data段地址
mov ds,ax
mov ah,0
mov al,ds:[0] ; ax <-- data段位元組單元的被除數12
mov bl,10
div bl
mov ds:[1],al ; 補全程式碼,讓商儲存到data段註釋中指定的單元
mov ds:[2],ah ; 補全程式碼,讓餘數儲存到data段註釋中指定的單元

mov ah,2
mov dl,ds:[1] ; 補全程式碼,使得dl <-- data段中儲存的商的位元組單元數值
add dl,30h ; 補全程式碼,使得dl中的數值轉換為數字字元
int 21h

mov ah,2
mov dl,ds:[2] ; 補全程式碼,使得dl <-- data段中儲存餘數的位元組單元數值
add dl,30h ; 補全程式碼,使得dl中的數值轉換為數字字元
int 21h

mov ax,4c00h
int 21h
code ends
end start

 

步驟截圖:

 

 

 

 

程式碼:

assume cs:code, ds:data
data segment
db 12,35,96,55,67
data ends
code segment
start:
; 補全程式,參考t1.asm,綜合應用以下知識完成:
; (1) loop指令、記憶體單元地址的靈活表示
; (2) div指令, 數字→數字字元的轉換
; (3) int 21h的2號子功能,完成單個字元輸出的方法,即:
; mov ah,2
; mov dl,待輸出字元或其ASCⅡ碼
; int 21h
; (4) 資料和資料之間以空格間隔的實現: 使用(3)輸出空格字元
mov ax, data
mov ds, ax
mov cx, 5h
mov di, 0h

s: mov ah,0
mov al,ds:[di]
mov bl,10
div bl
mov ds:[5],al
mov ds:[6],ah

mov ah,2
mov dl,ds:[5] ;十位
add dl,30h
int 21h

mov ah,2
mov dl,ds:[6] ;個位
add dl,30h
int 21h

mov ah,2
mov dl,32 ;空格
int 21h

add di,1h
loop s

mov ax,4c00h
int 21h
code ends
end start

 

步驟截圖:

 

; p187 實驗9

assume ds:data, cs:code
data segment
db 'welcome to masm!' ;共16個字元
db 2H,24H,71H ;字串屬性值
data ends

code segment
start: mov ax,data
mov ds,ax ;字串及屬性值所在段的段地址送入ds

mov ax,0b800H ;顯示區快取地址開始位置,想要列印到螢幕,就需要這個地址
mov es,ax ;80×25彩色字元模式顯示緩衝區段地址送入es

; 新增程式碼,通過迴圈逐個將每個字元及其屬性送入相應的顯示緩衝區對應行
; 即:將data段的字元及屬性通過迴圈逐個mov到顯示緩衝區(es)段相應的單元內

; 可以先嚐試分別寫三段程式碼,每次完成一行的顯示
; 程式執行起來後,再嘗試通過靈活的定址方式和迴圈,對三段程式碼修改和簡化
; 學習第10章子程式後,還可以進一步完善優化,設計子程式,將行號、列號、顏色屬性設定成入口引數

mov bx,0
mov si,0
mov cx,16

s0: mov ax,[bx]
mov es:[bx+720h][si],ax
mov al,2 ;存放顏色屬性值綠色
mov es:[bx+721h][si],al
inc bx
inc si
loop s0

mov bx,0
mov cx,16
mov si,160

s1: mov ax,[bx]
mov es:[bx+720h][si],ax
mov al,36 ;綠底紅色
mov es:[bx+721h][si],al
inc bx
inc si
loop s1

 

mov bx,0
mov cx,16
mov si,320

s2: mov ax,[bx]
mov es:[bx+720h][si],ax
mov al,113 ;白底藍色
mov es:[bx+721h][si],al
inc bx
inc si
loop s2

mov ax,4c00h
int 21h
code ends
end start