汇编语言学习笔记(7)——更灵活地定位内存

1、and指令

逻辑与指令,按位进行与运算,例如:
    mov al,01100011B
    and al,00111011B

计算后的al结果为:00100011B

计算过程:

 0  1  1  0  0  0  1  1   B
 0  0  1  1  1  0  1  1   B
----------------------------
 0  0  1  0  0  0  1  1   B

可以看出,逻辑与运算两个二进制的思路是,设1为真,0为假,则按位对应两个数,同一位置上下两个值同为真则结果为真(1),同为假则结果为假(0),一真一假结果为假(0);用更简单的结论就是:逻辑与运算中,同一位置只有同为真结果才为真,其它情况均为假。 应用场景:例如,如果要将某个二进制数的第2位(从第0位数起)变为0,则让它与11111011B做逻辑与运算

2、or指令

逻辑或指令,按位进行或运算,例如:
    mov al,01100011B
    or  al,00111011B    

计算后的al结果为:01111011

计算过程:

 0  1  1  0  0  0  1  1   B
 0  0  1  1  1  0  1  1   B
----------------------------
 0  1  1  1  1  0  1  1   B

可以看出,逻辑或运算的思路是:相同位置只要有一个为真则结果为真,其他情况结果为假。应用场景:例如,如果要将某个二进制数的第2位(从第0位数起)变为1,则让它与00000100B做逻辑或运算

3、汇编中,我们可以用一对单引号包裹的形式来表示数据是以字符的形式给出的,如:

dw ‘fork word‘
mov ‘a‘

4、在汇编语言中,可以用[bx+idata]的格式表示一个内存单元,例如:

mov ax,[bx+200]

此指令的数学表达式为:

(ax)= ((ds)*16 + (bx)+200)

从上面的示例中我们可以知道,其本质是将内存单元的偏移地址上加了一个常量值。

5、SI和DI在8086CPU中和bx功能相近的寄存器,即都可以存放内存偏移地址。

6、还可以用[bx+si]或[bx+di]的格式来标示内存偏移地址。

7、同样可以使用[bx+si+idata]或[bx+di+idata]的格式表示内存单元偏移地址。

时间: 2024-11-05 06:27:05

汇编语言学习笔记(7)——更灵活地定位内存的相关文章

《汇编语言》总结04 —— 更灵活的定位内存地址的方法

(一)and和or指令 and指令:逻辑与指令,按位进行与运算 mov al,01100011B and al,00111011B 执行后,al=00100011B 作用:通过该指令可将操作对象的相应位设为0,其他位不变. or指令:逻辑或指令,按位进行或运算 mov al,01100011B or al,00111011B 执行后:al=011111011B 作用:通过该指令可将操作对象的相应位设为1,其他位不变. (二)关于ASCII码 世界上有很多编码方案,有一种方案叫做ASCII编码,是

更灵活的定位内存地址的方法(学习汇编)

1.and指令:逻辑与指令,按位进行与运算.与1不变,与0变0,可将对象相应位设为0. 2.or指令:逻辑或指令,按为进行或运算.或1变1,或0变0,可将对象位设为1. 3.[BX+idata]的几种表现形式: mov ax,[200+bx] mov ax,200[bx] mov ax,[bx].200 4.SI和DI是8086CPU中和Bx功能相似的寄存器,只是不能分成两个8位的寄存器来用. 5.[BX+SI]进行内存地址定位的几种形式: mov ax,[bx][si] mov ax,[bx+

汇编语言学习第七章-更灵活的定位内存地址的方法

本博文系列参考自<<汇编语言>>第三版,作者:王爽 前面已经通过类似[0]和[bx]的方法进行了内存定位了.本章将涉及更多内存地址定位和编程的方法. 7.1 and 和 or 指令 (1) and指令,逻辑按位与指令 例如: mov al,01100011B and al,00111011B 执行后 al=00100011B and指令可以用来将某个数的位置为零. 比如我们要将al的第二位置为零,则: and al,11111101B 依次类推. (2) or指令,逻辑按位或指令

汇编语言——更灵活的定位内存地址的方法

and和or指令 1.and指令 将2进制中的1当做真,2进制中的0当做假 则:只有2个事件都为真的时候才为真,即1&&1==>1,1&&0==>0,0&&0==>0: 用处:假如想把一个数的第7位变成0,让它和01111111B执行与操作就好了 1 mov al,10001101B ; 8位数据 2 3 add al,01111111B 4 5 >> (al)=00001101B 2.or指令 只要2个事件中有1个是真即为真,

第七章 更灵活的定位内存地址的方法

一.and和or指令 ①and指令:逻辑与指令,按位进行与运算.(仅在1与1时结果中为1) eg:mov al,01100011B and al,00111011B 结果:al=00100011B 作用:通过该指令可以将操作对象的相应位设为0,其他位不变. ②or指令:逻辑或指令,按位进行或运算.(仅在0或0时为0) eg:mov  al,01100011B or   al,00111011B 结果:al=01111011B 作用:通过该指令可以将操作对象的相应位设为1,其他位不变. 注意:(1

第七章 更灵活的定位内存地址的方法 知识梳理

and和or指令 and逻辑与指令 作用:通过该指令可以将操作对象的相应位设为0,其他位不变 or 逻辑或指令 作用:通过该指令可以将操作对象的相应位设为1,其他位不变 [bx+idata]  [bx+si] [bx+di] si,di 在8086CPU中和BX功能相近的寄存器 si和di不能分成两个8位寄存器来使用! 等效写法 两个变量表示地址:[bx+si]  ↔  [si+bx], [bx][si], [si][bx] 一个变量一个常量表示地址:[bx+idata]  ↔  [bx]ida

linux命令学习笔记-持续更新版

shell 获取前一条命令是否执行成功 if [ $? -eq 0 ];then   echo "success" fi linux命令学习笔记-持续更新版

C++ Primer 学习笔记_99_特殊工具与技术 --优化内存分配[续1]

特殊工具与技术 --优化内存分配[续1] 三.operator new函数和operator delete 函数 – 分配但不初始化内存 首先,需要对new和delete表达式怎样工作有更多的理解.当使用new表达式 string *sp = new string("initialized"); 的时候,实际上发生三个步骤: 1)首先,表达式调用名为operator new 的标准库函数,分配足够大的原始的未类型化的内存,以保存指定类型的一个对象; 2)接下来,运行该类型的一个构造函数

C++ Primer 学习笔记_98_特殊工具与技术 --优化内存分配

特殊工具与技术 --优化内存分配 引言: C++的内存分配是一种类型化操作:new为特定类型分配内存,并在新分配的内存中构造该类型的一个对象.new表达式自动运行合适的构造函数来初始化每个动态分配的类类型对象. new基于每个对象分配内存的事实可能会对某些类强加不可接受的运行时开销,这样的类可能需要使用用户级的类类型对象分配能够更快一些.这样的类使用的通用策略是,预先分配用于创建新对象的内存,需要时在预先分配的内存中构造每个新对象. 另外一些类希望按最小尺寸为自己的数据成员分配需要的内存.例如,