8086CPU彙編 顯示字串

2021-07-25 05:26:19 字數 2098 閱讀 5455

在第8行第5列以紅色字型顯示「welcome to masm!」

assume ds:data,cs:code

data segment

db 'welcome to masm!',0

data ends

code segment

start: mov ax,data

mov ds,ax

mov si,0

;在8086cpu組合語言中,螢幕是80

*25(列*寬)

;0011為一列:00為字元本身,11為字元屬性

;0000

0000(76543210)分別代表:7為閃爍,654為背景rgb,3為高亮,210為字型rgb

mov dh,8 ;行

mov dl,5 ;列

mov cl,4 ;字型屬性(紅色)

call show ;進入子程式

mov ax,4c00h

int21h

show: push cx ;此程式壓入關鍵cx與si沒有太大必要,此處是為了規範性寫的,下面pop處同樣

push si

mov ax,0a0h ;要表示一行,需要用到a0個位元組

dec dh ;我們說的第8行,計算機是第7行,因為從0開始計算

mul dh ;第8行*一行的單位,就是第8行的起初位置

mov bx,ax ;將dh與ax的相乘結果ax儲存在bx中,待後續使用

mov al,2 ;一列需要用2個位元組表示

mul dl ;第5列開始位置,就是dl乘以ax

sub ax,2 ;第5列的起初位置

add bx,ax ;第8行第5列的起初位置

mov ax,0b800h ;視訊記憶體起初位址

mov es,ax ;將起初位址段給es

mov di,0 ;為後續的視訊記憶體段偏移位址初始化

mov al,cl ;釋放字型屬性cl到al中,因為cl預設是做迴圈使用的

s: mov cl,ds:[si] ;將welcome to masm這個字元賦值給cl,[為什麼要給cl大家自己查閱]

mov ch,0 ;cx=ch+cl,如果cl迴圈獲取到db定義的字元0時,cx就等於0,此時的jcxz就可以跳轉到ok

jcxz ok

mov es:[bx+di],cl ;將cl從db中獲取的字串存入視訊記憶體中[di是以偶數增長的,因為偶數字存放字元本身]

mov es:[bx+di+1],al ;上面將cl的字元屬性傳遞給al[di是以偶數增長的,所以奇數字的字元屬性需要加1]

inc si ;si自增1,是挨個獲取db中的字元

add di,2 ;di以偶數增加,是因為視訊記憶體中用2個位元組處理乙個字元[高位(偶數字)存在字元本身,低位(奇數字)存放字元屬性]

loop s ;迴圈此迴圈,直到cx為0,即:cl=ds:[si]=0

ok: pop si

pop cx

ret ;返回主程式

↑ 字元本身,11(此處為了說明使用11區分)是字元屬性(16進製制)

字元屬性含義:

0 0 0 0 0 0 0 0

7 6 5 4 3 2 1 0(上下一一對應,為下面方便說明,用此行數字代替)

7這一位置1時,為閃爍

654為背景色,分別代表:rgb,即red、green、blue

3這一位置1時,為高亮

210為字型色,分別代表:rgb,即red、green、blue

例:41 02即為:a

彙編學習之路之 8086CPU

8086 cpu 給出實體地址的方法 8086 cpu 有20位位址匯流排,可以傳送2位位址,達到1 mb的定址能力。8086 cpu又是16位結構,在內部一次性處理,傳送,暫時儲存的位址是 16位。從8086 cpu的內部結構來看,如果將位址從內部簡單的發出,那麼,它只能送出16位位址,表現出的定...

彙編基礎 8086CPU的執行方式

cpu內 注 不同的cpu暫存器的個數 結構是不同的。a 暫存器 暫存器是程式設計師主要能進行讀寫操作的部件。通過暫存器來實現對cpu的控制。8086所有的暫存器都是16位 16個二進位制位 的,可以存放2個位元組。8086總計14個暫存器 ax bx cx dx si di sp bp ip cs...

8086CPU相關組合語言的簡單概述

2.暫存器 記憶體訪問 3.bx 和loop指令 4.包含多個段的程式 5.更靈活的定位記憶體位址的方法 6.資料處理的兩個基本問題 7.轉移指令的原理 jcxz指令 8.call和ret指令 8086cpu有14個暫存器 ax,bx,cx,dx,si,di,sp,bp,ip,cs,ss,ds,es...