組合語言 筆記 BX 和loop指令

2021-10-10 20:58:33 字數 1960 閱讀 8254

符號mov ax,[bx]

inc bx

功能:bx中的內容加1

loop指令的格式為:loop 標號

cpu執行loop指令時,進行兩步操作:

程式設計計算2^12

assume cs:code

code segment

mov ax,2

mov cx,11

s: add ax,ax

loop s

mov ax,4c00h

int 21h

code ends

end

cx和loop指令相配合實現迴圈功能的三個要點:

程式框架:

mov cx,迴圈次數

s: 迴圈執行的程式段

loops

大於9fffh的十六進製制數在書寫時是以字母開頭,而組合語言源程式中,資料不能以字母開頭

所以要在前面加0,如a000h應該寫為0a000h

g命令

ex:g 0012會從當前cs:ip指向的指令開始執行,一直到(ip)=0012h為止

p命令

自動執行迴圈中的指令,知道(cx)=0為止

mov ax,[idata]

debug將[idata]解釋為記憶體單元,編譯器則解釋為常量idata

解決方法:

訪問記憶體單元合法的格式

mov ax,[bx]

mov ax,ds:[0]

mov ax,ds:[bx]

問題:計算ffff:0~ffff:b單元中的資料之和,結果儲存在dx中

記憶體單元中的資料為8位,不能直接加到16位暫存器dx中

解決方法:用乙個16位暫存器做中介,將8位資料賦值到乙個16位暫存器中ax中,再將ax的資料加到dx上

程式**

assume cs:code

code segment

mov ax,0ffffh

mov ds,ax ;將段位址送入ds中

mov bx,0 ;偏移位址初始化為0

mov dx,0 ;初始化累加暫存器dx

mov cx,12 ;初始化迴圈計數器

s: mov al,[bx]

mov ah,0 ;形成8位資料

add dx,ax

inc bx

loop s

mov ax,4c00h

int 21h

code ends

end

在記憶體單元訪問指令**現,用於顯式地指明記憶體單元的段位址的ds:等成為段字首

dos模式下,0:200~0:2ff空間一般沒有系統或其他程式的**

當我們需要向記憶體空間直接寫入內容時,可以使用這段空間

問題:將記憶體ffff:0ffff:b單元中的資料複製到0:200020b單元中

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],bl

inc bx

loop s

mov ax,4c00h

int 21h

code ends

end

顯式地使用es:就不用頻繁更換ds中的段位址

組合語言04 BX 和loop指令

整理自fishcc論壇課件 首先展示乙個新的程式 assume cs codesg codesg segment start mov ax,2000h mov ds,ax mov al,0 mov bl,1 mov cl,2 mov dl,3 mov ax,4c00h int 21h codesg ...

組合語言 bx 和loop指令和多個段

要完成描述乙個記憶體單元,需要兩種資訊 記憶體單元的長度 型別 loop指令和cx相配合實現迴圈功能的,cx中存放迴圈的次數。loop指令的格式是 loop 標號,cpu執行loop指令的時候,要進行兩步操作 mov cx,迴圈次數 s 迴圈執行的程式段 loop s在8086模式限制下如果資料,棧...

組合語言 bx 和loop指令和多個段

要完成描述乙個記憶體單元,需要兩種資訊 記憶體單元的長度 型別 loop指令和cx相配合實現迴圈功能的,cx中存放迴圈的次數。loop指令的格式是 loop 標號,cpu執行loop指令的時候,要進行兩步操作 mov cx,迴圈次數 s 迴圈執行的程式段 loop s在8086模式限制下如果資料,棧...