2.汇编中的算数运算指令

上周我的学习进度较快,看了很多的理论知识,没有进行太多的实践,所以先把理论知识进行一个总结,然后本周在将书中的实验进行实践。

1.定义多个段的方法:

(1)对于不同的段,要有不同的段名

(2)段短地址的引用:段名就相当于一个标号,它代表了段地址

(3)“代码段”、“数据段”、“栈段”完全是我们安排的

2.CPU到底如何处理我们定义的段中的内容,是当指令执行,当作数据访问,还是当作栈空间,完全是靠程序中具体的汇编指令,和汇编指令对CS:IP、SS:SP、DS等寄存器设置来决定的。

3.(1)“and”指令:逻辑与指令,按位进行与运算。

通过该指令可将操作对象的相应位设为0,其他位不变                         (2)“or”指令:逻辑或指令,按为进行或运算。

通过该指令可将操作对象的相应位设为1,其他位不变

4.我们可以在汇编程序中,用‘……’的方式致命数据是以字符的形式给出的,编译器将把它们转化为相对应的ASCLL码。

5.可以用[idata]、[bx]、[bx+idata]、[bxsi]、[bx+idata+si]来表示一个内存单元。

6.一般来说,在需要暂存数据的时候,我们都应该使用栈。

7.寄存器只能以这4种组合出现:bx和si、bx和di、bp和si、bp和di

8.在机器指令中要指明,指令进行的是字操作还是字节操作。

(1)通过寄存器名指明要处理的数据的尺寸。(如:ax、al)

(2)在没有寄存器名存在的情况下,用操作符X ptr指明内存单元的长度,X在汇编指令中可以为word或byte。

9.push指令只对字进行操作

10.div是除法指令,使用div做除法的时候应注意以下问题:

(1)除数:有8位和16位两种,在一个reg或内存单元中

(2)被除数:默认存放在AX或DX和AX中,如果除数为8位,则被除数为16位,默认存放在AX中;如果除数为16位,被除数则为32位,在DX和AX中存放,DX存放高16位,AX存放低16位。

(3)结果:如果除数为8位,则AL存储除法操作的商,AH存储除法操作的余数;如果除数为16位,则AX存储除法操作的商,DX存储除法操作的余数。

11.db和dw分别定义字节型数据和字型数据,dd用来定义dword(double word双字型数据。

 

 

 

 

时间: 2024-10-17 22:41:35

2.汇编中的算数运算指令的相关文章

汇编中精妙的流程控制

汇编中精妙的流程控制 前言 今天一天挺废啊,百无聊赖啊,唉,也不想学习,看了一天的电视了,不过好在我还是想看看OS中的东西,这次咱们一起来看看一个特别有趣的内容,就是汇编级的语言,如何利用寄存器实现if/for/while这些高级语言的流程控制,这一点十分神奇.保证你绝对想不到在汇编中是这样实现平时的流程控制的. 正文 条件码寄存器 这个子标题在之前就出现过,条件码寄存器与普通的寄存器不同,他们都是1位寄存器,换句话说,它们当中的值只有0和1.当有算数与逻辑发生时,这些条件码寄存器当中的值会相应

汇编中Enter与Leave指令

Enter的作用相当==push ebp和mov ebp,esp 这后面两句大家很熟悉吧?函数开始一般都是这两句 Leave的作用相当==mov esp,ebp和pop ebp 而这后面这两句也很常见,函数调用完后一般的用到 以上的Enter和leave的作用分别函数开始和结束 Win32汇编中局部变量的使用方法可以解释一个很有趣的现象:在DOS汇编的时候,如果在子程序中的push指令和pop指令不配对,那么返回的时候ret指令从堆栈里得到的肯定是错误的返回地址,程序也就死掉了.但在Win32汇

汇编中的跳转指令

能修改CS以及IP的指令都是转移指令.它分为段内转移,段间转移. 段内转移:只修改IP的值 段间转移:同时修改CS以及IP的值 段内转移根据转移的距离远近分为:短转移,近转移 短转移:转移范围为-128 – 127 近转移:转移范围为-32768 –32767 根据转移情况又分为: 无条件转移指令 条件转移指令 循环指令 过程 中断 <1> jmp short xxx(行号) 这个是短转移指令,实现段内的转移,在翻译成机器码的时候,码内并没有目标地址,有的只是转移位移,这样做的好处就是防止目标

汇编中标号不加:的情况分析

对于汇编中标号不加:,如a db db a,b,c 等 标号都视为偏移地址,和转移指令地址的差不同,用标号时(除转移)就等于其偏移地址,安装时需要注意这个.

C语言extern引用AT&T汇编中的变量,任意转换类型

今天研究出了一个小问题,在C语言里引用汇编的变量,会是什么结果,汇编中的变量没有像C语言中int类型那样的类型约束,可以把数据当作任何类型处理,那么传到C语言中我们应该当作什么类型处理呢. 换句话说,在汇编里定义变量var,在C语言里引用,我们肯定要用extern声明var外部变量,那么extern后面接什么类型?难道是extern int var么?还是 extern short var 实例: 一. 汇编程序:(是的,就这么短小) .global var  #注意现在的汇编器不再要求被C语言

16位汇编中的伪指令

汇编中的伪指令(基于汇编编译器MASM讲解) 一丶什么是伪指令,以及作用 首先我们用汇编开发效率低,如何才能开发效率高,甚至开发速度比C语言或这个高级语言快 答案: 伪指令 什么是伪指令 伪指令是汇编编译器提供的,比如昨天我们写的汇编代码,假设调用一个Call我们每次都要手工处理 保存栈底,开辟就变量空间,保存寄存器环境....每次都要做,特别麻烦,所以编译器帮我们提供了伪指令,只要我们 按照汇编编译器的语法去写,那么这些汇编编译器则会自动帮我们补全 比如昨天的代码: ;调用开始,把参数压栈 m

为什么X86汇编中的mov指令不支持内存到内存的寻址?

在X86汇编中,MOV [0012H], [0016H]这种指令是不允许的,至少得有一个操作数是寄存器.当然,这种问题在用高级语言的时候看不到,感觉好像基本上都是从内存到内存啊,为毛到了汇编就不行了???这个问题在stack overflow有个解释不错: The answer involves a fuller understanding of RAM. Simply stated, RAM can only be in two states, read mode or write mode.

汇编中基本的数据类型

1.字节(DB)define byte 一个字节有8位二进制组成,其最高位是第7位,最低位是第0位.在表示有符号数时,最高位就是符号位. 00001001    =9 10001011    = -11    有符号 =  139         无符号 通常情况下,存储器按字节编址,读写存储器的最小信息单位就是一个字节. Var_byte     db    10011101B Var_bytes    db    41H,42D,61H 那么一个字节8位最大的值为 11111111=256

汇编中,BP,SP有何区别?分别怎么使用?

bp寄存器,跟其它什么BX,AX一样的用法, SP是用在栈上的,配合SS使用,像SS:SP SS上放段地址,SP上放偏移地址. 寻址时,像[bp],相当于SS:[bp] 就是说它默认使用SS 像BX默认使用CS---------------------------------------------------ss栈段寄存器sp栈顶指针寄存器bp默认的栈寻址寄存器--------------------------------------------------- sp会随着带有堆栈操作的指令(