符號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模式限制下如果資料,棧...