Assembly 逻辑指令
创始人
2024-03-28 08:32:46
0

处理器的指令集提供的指令AND,OR,XOR,TEST和NOT布尔逻辑的测试,根据该方案的需要的位进行置位和清除。

这些指令的格式:SN指令格式1ANDAND operand1, operand22OROR operand1, operand23XORXOR operand1, operand24TESTTEST operand1, operand25NOTNOT operand1在所有的情况下,第一个操作数可以是寄存器或内存中。第二个操作数可以是寄存器/存储器或立即值(常量)。但是,内存到内存的操作是不可能的。这些指令可比较或匹配位操作数和CF,PF,SF和ZF标志。AND 指令AND指令用于支持逻辑表达式执行按位与运算。按位与运算返回1,如果匹配两个操作数位为1,否则返回0。例如:Operand1: 	0101Operand2: 	0011

After AND -> Operand1: 0001

“与”操作,可用于清除一个或多个位。例如说,BL寄存器包含00111010。如果需要清除的高位零,AND 0FH。

AND BL, 0FH ; This sets BL to 0000 1010

我们的另一个例子。如果想检查一个给定的数字是否是奇数还是偶数,一个简单的测试将是检查的数量最少的显着位。如果是1的为奇数,其他的数是偶数。假设数字是在AL寄存器,我们可以这样写:

AND AL, 01H ; ANDing with 0000 0001
JZ EVEN_NUMBER

下面的程序说明了这一点:例子:

section .text
global _start ;must be declared for using gcc
_start: ;tell linker entry yiibai
mov ax, 8h ;getting 8 in the ax
and ax, 1 ;and ax with 1
jz evnn
mov eax, 4 ;system call number (sys_write)
mov ebx, 1 ;file descriptor (stdout)
mov ecx, odd_msg ;message to write
mov edx, len2 ;length of message
int 0x80 ;call kernel
jmp outprog
evnn:
mov ah, 09h
mov eax, 4 ;system call number (sys_write)
mov ebx, 1 ;file descriptor (stdout)
mov ecx, even_msg ;message to write
mov edx, len1 ;length of message
int 0x80 ;call kernel
outprog:
mov eax,1 ;system call number (sys_exit)
int 0x80 ;call kernel
section .data
even_msg db ‘Even Number!’ ;message showing even number
len1 equ $ - even_msg
odd_msg db ‘Odd Number!’ ;message showing odd number
len2 equ $ - odd_msg

上面的代码编译和执行时,它会产生以下结果:

Even Number!

一个奇怪的数字,像在AX寄存器中的值更改:

mov ax, 9h ; getting 9 in the ax

该程序会显示:

Odd Number!

同样你可以它清除整个寄存器 :AND和00H.OR 指令OR指令用于支持逻辑表达式执行按位OR运算。位OR运算符返回1,如果其中一个或两个操作数位匹配是一个。它返回0,如果两个位都是零。例如,Operand1:     0101Operand2:     0011

After OR -> Operand1: 0111

OR(或)操作可用于设置一个或多个位。例如,让我们假设AL寄存器包含00111010,需要设置四个低阶位,OR 0000 1111,即FH值。

OR BL, 0FH ; This sets BL to 0011 1111

实例:下面的示例演示OR指令。让我们存储5和3值分别在AL和BL寄存器。然后,该指令

OR AL, BL

应该AL寄存器中存放7:

section .text
global _start ;must be declared for using gcc
_start: ;tell linker entry yiibai
mov al, 5 ;getting 5 in the al
mov bl, 3 ;getting 3 in the bl
or al, bl ;or al and bl registers, result should be 7
add al, byte ‘0’ ;converting decimal to ascii
mov [result], al
mov eax, 4
mov ebx, 1
mov ecx, result
mov edx, 1
int 0x80

outprog:
mov eax,1 ;system call number (sys_exit)
int 0x80 ;call kernel
section .bss
result resb 1

上面的代码编译和执行时,它会产生以下结果:

7

XOR 指令XOR指令实现按位异或操作。异或运算得到位设置为1,当且仅当从操作数的位是不同的。如果操作数的位相同(都为0或为1),将得到的位被清除为0。实例,Operand1:     0101Operand2:     0011

After XOR -> Operand1: 0110

异或操作数本身改变操作数为0。这是用来清除寄存器。

XOR EAX, EAX

TEST 指令测试指令的工作原理相同的“与”操作,但不像AND指令,它不改变它的第一个操作数。所以,如果我们需要检查是否在寄存器数量是偶数还是奇数,我们也可以做到这一点不改变原有号码的情况下使用测试指令。(adsbygoogle = window.adsbygoogle || []).push({});(adsbygoogle = window.adsbygoogle || []).push({});TEST    AL, 01H

JZ EVEN_NUMBER

NOT 指令指令实现按位非运算。 NOT运算操作数的位逆转。该操作数可能是在一个寄存器或存储器中。实例,Operand1:     0101 0011

相关内容

热门资讯

分手后“60后”男子起诉“90... 日前,重庆市云阳县人民法院公开了一份刑事附带民事判决书。重庆“60后”男子陈某某在分手后,以赠与合同...
今年我国积极财政政策打出“组合... 12月27日至28日,全国财政工作会议在北京召开。记者从会议上了解到,2025年,我国积极财政政策打...
福州4A景区“瓷天下”停业后续... 2024年6月,红星新闻曾报道福州市闽清县4A级景区“瓷天下”关门停业一事。(此前报道:)彼时,景区...
2026年我国将继续实施更加积... 12月27日至28日,全国财政工作会议在北京召开。2026年是我国连续第二年实施更加积极的财政政策。...
中国财长介绍“更加积极的财政政... 中新社北京12月28日电 (记者 赵建华)2026年中国继续实施更加积极的财政政策,保持必要的财政赤...
泽连斯基称基辅存在“红线”并拒... 【弗拉基米尔·泽连斯基表示,基辅在冲突解决方面仍有“红线”,并补充道,在任何情况下,乌方都不打算在法...
北京专业离婚律师服务分析(20... 随着社会经济结构的变化与个人权利意识的增强,婚姻家事法律服务需求日益呈现出专业化、精细化的趋势。在北...
海南自贸港封关超十日 多项政策... 本月18日,海南自由贸易港正式启动全岛封关运作,到今天(28日)已超过10天,多项从封关起实施的“升...
涉嫌恶意串通,伪造借条提起诉讼... 为逃避债务、规避法院执行 田某华串通亲友、伪造借条 向海南省海口市美兰区人民法院 提起诉讼 美兰法院...
原创 在... 在古代,被皇帝赐死其实是一种特殊的待遇,而不仅仅是死亡本身值得关注,更应看赐字所体现的意义。 首...