《組合語言》學習(五)迴圈

2021-07-23 13:46:00 字數 2420 閱讀 9394

本文我將對這三個話題進行簡單描述,並給出一張思維導圖總結該章節的知識點,最後重點討論該章節的課後實驗題。

一、知識點總結

1,迴圈

組合語言中,編寫乙個簡單的迴圈,最主要應用loop指令和標號(mark)。其中,loop指令包含兩個步驟:

1)(cx)=(cx)-1;

2)判斷cx是否為0,然後決定跳轉到標號表示的指令位址或執行後面的**。

如下,是乙個計算2^12的匯程式設計序

assume cs:code

code segment

mov ax,2

mov cx,12

s:add ax,ax

loop s

mov ax,4c00h

int 21h

code ends

end

2,在迴圈中使用變數

舉乙個簡單例子:計算ffff:0 - ffff:b 單元中的資料的和,結果儲存在dx中。

assume cs:code

code segment

mov ax,0ffffh

mov ds,ax

mov bx,0

mov dx,0

mov cx,12

s:mov al,[bx]

mov ah,0

add dx,ax

inc bx

loop s

mov ax,4c00h

int 21h

code ends

end

由於迴圈內,需要遞增記憶體位址,不能用常量,需要設計乙個變數,隨著迴圈遞增。

3,記憶體複製

將記憶體ffff:0 - ffff:b單元中的資料複製到0:200 - 0:20b單元中

assume cs:code

code segment

mov ax,0ffffh

mov ds,ax

mov ax,0020h

mov es,ax

mov bx,0

mov cx,12

s:mov dl,[bx]

mov es:[bx],dl

inc bx

loop s

mov ax,4c00h

int 21h

code ends

end

如上,在迴圈中,直接使用顯示段字首,即可實現記憶體段的切換。簡化了記憶體複製的步驟。

二、知識圖譜

三、實驗題

1,程式設計,向記憶體0:200 - 0:23f依次傳送資料0 - 63(3fh),程式只能使用9條指令,包括退出指令。

assume cs:code

code segment

mov ax,0020h

mov ds,ax

mov bx,0

mov cx,40h

s:mov [bx],bx

inc bx

loop s

mov ax,4c00h

int 21h

code ends

end

2,**補全

將「mov ax,4c00h」之前的指令複製到記憶體0:200處。

assume cs:code

code segment

mov ax,cs

mov ds,ax

mov ax,0020h

mov es,ax

mov bx,0

mov cx,17h

s:mov al,[bx]

mov es:[bx],al

inc bx

loop s

mov ax,4c00h

int 21h

code ends

end

問題:1)複製的是什麼?從**到**?

複製的是機器碼(二進位制資訊),從cs:ip開始到「mov ax,4c00h」之前。其中,cs:ip即**段的起始位址。

2)複製的是什麼?有多少個位元組?你如何知道要複製的位元組的數量。

該段**使用的是按位元組複製「mov al,[bx]」。我的辦法是先估乙個位元組數,如10,填進**,然後在debug下反彙編,看看真實的位元組數

如上圖所示,反彙編「cs:0」開始的**,到「mov ax,4c00h」,看第一列,它的位址是0017(h)。故,需要複製的**位元組數為17h。

執行到0017後(g 0017),可以用「u命令」反彙編「0020:0」的**,比較一下,是否正確。

組合語言學習

參考書籍 組合語言 王爽 著 清華大學出版社 選單導航 一 彙編基礎知識 二 暫存器和常見彙編指令演示 一 基礎知識 1 彙編指令是機器指令的助記符,同機器指令一一對應 2 每一種cpu都有自己的彙編指令集 3 cpu可以直接使用的資訊在儲存器中存放 4 在儲存器中指令和資料沒有任何區別,都是二進位...

組合語言學習

持續更新 彙編指令 1.mov指令 mov是乙個傳送指令,可以實現以下操作 有一點需要注意,資料不能直接傳給段暫存器,比如mov ds,100h就是錯誤的。但是可以將其他暫存器中的值賦給段暫存器。段暫存器有cs,ds,ss,es等。如果你想知道為什麼,那就可以去了解一下關於每條指令的硬體實現。後面還...

組合語言學習筆記

學習參考資料 大灰狼 講彙編 資料匯流排,位址匯流排,控制匯流排。位址匯流排有多少條就決定了cpu最大的記憶體使用量。80386有32位位址匯流排,所以它的定址能力就是4g.暫存器 通用暫存器,段暫存器,ax暫存器 通用暫存器,存放資料。高位位元組ah,低位位元組al。實體地址表示方法 位址加法器,...