x86彙編學習記錄 3月28日

2021-07-29 17:17:45 字數 1513 閱讀 3871

/1. 使用xor ax, ax完成設定暫存器為0

乙個數和自己進行異或結果為0,因此可以使用 xor ax, ax 完成對暫存器ax清零的操作,這比mov ax, 0來的更高效而且指令占用的記憶體空間更少。

2. 使用and ax, ax判斷設定sf位從而快捷地判斷ax的正負性

and ax, ax不會改變ax的值,但是會影響到標誌暫存器sf,在這條語句之後,常常跟上js/jns/jz/jnz從而完成為正跳轉、負跳轉、0跳轉、非0跳轉

and ax, ax

js label1 ;當ax為負跳轉label1

and bx, bx

jns lable2 ;當bx非負跳轉label2

and cx, cx

jz label3 ;當cx為0時跳轉label3

and dx, dx

jnz label4 ;當dx非0時跳轉label4

如下例項

編制的程式實現的功能為:

變數 x、y同正或者為0的時候, 輸出資料a為1;

變數 x、y同時為負的時候,輸出資料a為-1

變數 x、y其餘情況下,輸出資料a為0

.386

data segment use16

x db -8

y db -9

a db ?

data ends

stack segment use16 stack ;注意後面要跟上乙個stack,否則沒有辦法識別堆疊段

db 100 dup(0)

stack ends

code segment use16

assume cs:code, ds:data, ss:stack

main:

mov ax, data

mov ds, ax

mov al, x

;取出變數x

and al, al ;判斷符號位

jns label1;

mov al, y

;取出變數y

and al, al ;判斷符號位

jns result_0 ;輸出結果為0

mov a, -1

;同小於0,判斷為-1

exit:

mov ah, 4ch

int 21h ;結束程式

label1:

mov al, y

;取出變數y

and al, al;判斷符號位

js result_0 ;y < 0

mov a, 1

jmp exit

result_0:

mov a, 0

jmp exit

code ends

end main

x86彙編學習筆記

debug 是dos,windows都提供的實模式 8086 方式 程式的除錯工具.windows下使用dosbox模擬dos環境,掛載所在目錄後開啟debug.exe r指令 顯示r ax 0000 bx 0000 cx 0000 dx 0000 sp 00fd bp 0000 si 0000 d...

32位x86彙編學習總結

大學裡的微機原理課學的讓我汗顏,工作之餘,重新學習了一遍x86的彙編。彙編主要包括暫存器,指令操作,控制迴圈結構以及棧幀中的 esp和 ebp的變化。32位x86包括8個暫存器,分別是 eax accumulate ecx conuter edx data ebx base esi source i...

組合語言 基於X86 學習筆記

1.機器語言 machine language 是一種數字語言,專門設計成唄計算機處理器 cpu 理解。所有x86處理器都理解的共同機器語言。2.組合語言 assembly language 包含助記符書寫的語言。3.組合語言與機器語言是一一對應 one to one 的關係。4.彙編器 assem...