匯編指令分類


匯編

匯編語言包含兩種指令:

  1. 匯編指令
  2. 偽指令

偽指令

沒有對應的機器指令,最終不會被CPU執行。偽指令是編譯器執行的指令。

segement和ends

segement 表示一個段的開始,ends表示一個段的結束

段名 segment
段名 ends

比如:
codesg segement
codesg ends;

end

表示一個匯編程序的結束標記,編譯器在編譯的時候如果碰到了end,就會結束對源程序的編譯

assume

假設某一段寄存器和程序中的某一個用segment...ends定義的段相關聯。

標號

一個標號指代了一個地址,

步過循環p

遇到loop使用p來進行跳過

跳到指定的語句g ip

使用g ip跳到指定語句

start 告訴程序的入口

assume cs:code
code segment
	
		dw 0123h, 0456h, 0789h, 0abch, 0defh, 0fedh, 0cbah, 0987h

start:  mov bx, 0    ; 跳過前面的數據,不加start代碼會從數據處開始
		mov ax, 0

		mov cx, 8	
		s:add ax, cs:[bx]
		add bx, 2
		loop s

		mov ax, 4c00h
		int 21h

code ends
end start

匯編指令

匯編只有是有對應的機器碼的指令,可以被便以為機器指令,最終為CPU所執行。

loop

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

loop 執行之后,寄存器cx會自動減一,直到減到0,跳出循環執行loop的下一條語句

段前綴 ds, cs, ss, es

指令mov ax, [bx]中,內存的那元的偏移地址由bx給出,而段地址默認在ds中。我們可以在訪問內存單元的指令中顯式地給出內存單元的段地址所在的段寄存器。

例如

mov ax, ds:[bx]
mov ax, cx:[bx]
mov ax, ss:[bx]
mov ax, es:[bx]
mov ax, ss:[0]
mov ax, cs:[0]

[bx+idata]

表示一個內存單元,偏移地址+idata = 新的偏移地址

常用格式, 下面的寫法都是將bx + 200

mov ax, [200 + bx]
mov ax, 200[bx]
mov ax, [bx].200

SI和DI

SI和DI是8086CPU中和BX功能相近的寄存器

下面3組指令實現了相同的功能

; 1
mov bx, 0
mov ax, [bx]
;2
mov si, 0
mov ax, [si]
;3
mov di, 0
mov ax, [di]

[bx + si]和 [bx + di] 的用法一樣

[bx + si]表示一個內存單元,它的偏移地址為(bx) + (si)(即bx中的數值加上si中的數值)

常用格式

;1
mov ax, [bx + si]
;2
mov ax, [bx][si]

[bx + si + idata]和[bx + di + idata]的用法一樣

[bx + si + idata]表示一個內存單元,它的偏移地址為(bx) + (si) + idata(即bx中的值加上si中的值再加上idata)

常用格式

;1
mov ax, [bx + 200 + si]
;2
mov ax, [200 + bx + si]
;3
mov ax, 200[bx][si]
;4
mov ax, [bx].200[si]
;5
mov ax, [bx][si].200

通過and和or轉換大小寫

轉換為大寫

and al, 11011111b

轉換為小寫

or al, 00100000b

reg表示寄存器sreg表示段寄存器

reg的集合包括:ax, bx, cx, dx, ah, al, bh, bl, ch, cl, dh, dl, sp, bp, si, di

sreg的集合包括:ds, ss, cs, es'


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM