在組合語言中用不同顏色顯示同一字串

2021-10-04 21:42:43 字數 1520 閱讀 8233

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語句只能用於完整的段定義。...