assume cs:code,ds:data,ss:stack
data segment
db 'welcome to masm!' ;定義要顯示的字串
db 02h,24h,71h ;定義三種顏色屬性
; 7 6 5 4 3 2 1 0
;顏色屬性:bl r g b i r g b
; 閃 背景 亮 前景
;比如紅底綠字,屬性位元組為:01000010b
; 紅底閃爍綠字,屬性位元組為:11000010b
; 紅底高亮綠字,屬性位元組為:01001010b
; 黑底白字,屬性位元組為:00000111b
; 白底藍字,屬性位元組為:01110001b
data ends
stack segment
dw 8 dup(0)
stack ends
code segment
start:
mov ax, data
mov ds, ax
mov ax, stack
mov ss, ax
mov sp, 10h
xor bx, bx ;bx清零,用來索引顏色
mov ax, 0b872h ;算出螢幕第12行中間的視訊記憶體的段起始位置放入ax中
mov cx, 3 ;s3迴圈控制行數,外迴圈為3次,因為要顯示三個字串
s3: push cx
push ax
push bx ;三個進棧操作為外迴圈s3儲存相關暫存器的值
mov es, ax ;此時es為螢幕第12行中間的視訊記憶體的段起始位置
mov si, 0 ;si用來索引**列的字元
mov di, 0 ;di用來定位目標列
mov cx, 10h
;s1迴圈控制存放的字元,內迴圈為10h次,因為乙個字串中含10h個位元組
s1: mov al, ds:[si]
mov es:[di], al
inc si
add di, 2
loop s1 ;此迴圈實現偶位址中存放字元
mov di, 1 ;di的值設為1,從而為在視訊記憶體奇數字址中存放字元的顏色屬性做準備
pop bx
mov al, ds:10h[bx] ;取顏色屬性
inc bx
mov cx, 10h ;第二個內迴圈也為10h次
s2: mov es:[di], al
add di, 2
loop s2 ;此迴圈實現奇位址中存放字元的顏色屬性
;以下4句為下一趟外迴圈做準備
pop ax
;在段位址中加0ah,相當於在偏移位址中加了0a0h(=160d)
pop cx
loop s3
mov ax, 4c00h
int 21h
code ends
end start
組合語言中用埠的讀取與運用
任務 顯示當前的年月日以及時分秒 在8086cpu中,有乙個晶元cmos ram,這個晶元中可以得到當前的時間,但是這裡的資料是以bcd碼給出的,要進行顯示,必須要先將bcd碼轉換為ascii才能在dos中顯示出來,然而在轉換的過程中需要用到兩個比較重要的運算,就是左移運算和右移運算 左移運算 sh...
組合語言中的常數
1,數值常數 二進位制數 10110100b 八進位制數146q,5430 十進位制數146d,543 十六進製制數 1a2fh,0ff00h 實數12.48e 2,1a3c0000r 彙編時,則有匯程式設計序將所有的數值常數都轉換成二進位制標示的目標 凡是以字母a f開頭的十六進製制數,唏噓在前面...
組合語言中ASSUME簡介
size large url 組合語言中的assume偽指令 directive assume偽指令通知匯程式設計序為 段 資料段 附加段以及堆疊段選擇什麼名字。沒有assume偽指令時,匯程式設計序假設不分段,並自動把段超越字首用於所有定址儲存器資料的偽指令。assume語句只能用於完整的段定義。...