MASM

汇编程序设计与计算机体系结构软件工程师教程笔记:指令

♀尐吖头ヾ 提交于 2020-10-08 02:27:22
《汇编程序设计与计算机体系结构: 软件工程师教程》这本书是由Brain R.Hall和Kevin J.Slonka著,由爱飞翔译。中文版是2019年出版的。个人感觉这本书真不错,书中介绍了三种汇编器GAS、NASM、MASM异同,全部示例代码都放在了GitHub上,包括x86和x86_64,并且给出了较多的网络参考资料链接。这里只摘记了NASM和MASM,测试代码仅支持Windows和Linux的x86_64。 4. 基本指令 4.1 简介: 在很多情况下,MASM会根据上下文来推测指令中的操作数是什么类型,有的时候NASM也是这样。 在撰写指令的目标操作数时,如果要对变量解引用 (dereference) ,NASM 要求你必须指出大小 ,也就是必须在变量名的前面写上一个表示尺寸的命令,例如用BYTE表示字节、WORD表示字等,比方说像这样:”mov DWORD [test], eax” 4.2 数据的移动与算术运算: MOV指令有几条具体的要求: (1). 两个操作数的大小必须相同; (2). 两个操作数不能全是内存操作数(也就是说要想在两个内存操作数之间移动数据,必须用寄存器做中介); (3). 指令指针寄存器(ip/eip/rip)不能用作目标操作数。 使用XCHG指令可令两个位置上的数据彼此交换。和MOV指令类似,XCHG指令的两个操作数也不能全都是内存操作数。

汇编程序设计与计算机体系结构软件工程师教程笔记:函数、字符串、浮点运算

别等时光非礼了梦想. 提交于 2020-10-06 00:51:10
《汇编程序设计与计算机体系结构: 软件工程师教程》这本书是由Brain R.Hall和Kevin J.Slonka著,由爱飞翔译。中文版是2019年出版的。个人感觉这本书真不错,书中介绍了三种汇编器GAS、NASM、MASM异同,全部示例代码都放在了GitHub上,包括x86和x86_64,并且给出了较多的网络参考资料链接。这里只摘记了NASM和MASM,测试代码仅支持Windows和Linux的x86_64。 6. 函数 6.2 栈内存入门: 栈内存 (stack memory) 是为自动变量而设的一块区域 (这里的自动变量是指局部变量,或者说非动态的变量)。调用函数的时候,需要用栈来保存函数中的局部变量,而函数结束的时候,则需要弃用这些变量。高级语言的一项特征在于它会自行管理栈内存(这有时也叫做运行时栈或运行期栈),相反,汇编语言不会这样做,而是需要你自己去管理。 与栈内存有关的重要事项: (1).栈会在调用函数时增长,并在调用结束时收缩。 (2).栈会在创建(或者说推入/压入)局部变量时增长,并在弃用(或者说弹出)局部变量时收缩。 (3).每个进程或线程的栈,其大小受操作系统限制,例如Linux/Mac系统默认是8MB,Windows默认是1MB。 (4).每次调用函数(这也包括调用主函数main(),以及递归地调用自身)都会出现对应的栈帧(stack frame)

汇编语言中短转移指令jmp short指令偏移地址计算

巧了我就是萌 提交于 2020-10-03 13:49:11
汇编语言中,jmp short指令是8位转移指令,可以修改ip寄存器的范围为-128~127 (8位补码的表示范围,因为偏移地址计算使用的是补码) 短转移指令的机器码格式为EB??,其中??表示8位偏移地址,接下来研究??的计算方法。 一、公式介绍 要计算jmp short的偏移地址,我们要记住公式: 偏移地址=标记处的偏移地址-CPU读完该jmp指令后的ip寄存器值 二、方法步骤 1.后跳转 我们引入MASM中的代码片段 DATAS SEGMENT DATAS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKS START: MOV AX,DATAS MOV DS,AX jmp short s mov ax,1000H mov ax,1000H mov ax,1000H s:mov bx,ax MOV AH,4CH INT 21H CODES ENDS END START s位于jmp指令的后面。 编译后进行debug,使用u指令查看汇编指令,如下图: 可以看到标记s处的偏移地址为0010H,CPU读取完jmp指令后ip指向了0007H,找到了这两个关键数据后套用公式:偏移地址=标记地址-ip地址,即0010H-0007H。 在计算机中,减法运算是转换成加法进行,即-x转化成+(x)补,需要将减号后面的数字转换成补码:

汇编程序设计与计算机体系结构软件工程师教程笔记:总结

隐身守侯 提交于 2020-10-01 11:28:54
《汇编程序设计与计算机体系结构: 软件工程师教程》这本书是由Brain R.Hall和Kevin J.Slonka著,由爱飞翔译。中文版是2019年出版的。个人感觉这本书真不错,书中介绍了三种汇编器GAS、NASM、MASM异同,全部示例代码都放在了GitHub上,包括x86和x86_64,并且给出了较多的网络参考资料链接。这里只摘记了NASM和MASM,测试代码仅支持Windows和Linux的x86_64。 这里是基于之前所有笔记的简单总结,笔记列表如下: 处理器、寄存器简介: https://blog.csdn.net/fengbingchun/article/details/108164694 汇编语法基础知识: https://blog.csdn.net/fengbingchun/article/details/108165957 指令: https://blog.csdn.net/fengbingchun/article/details/108203513 函数、字符串、浮点运算: https://blog.csdn.net/fengbingchun/article/details/108419088 内联汇编与宏: https://blog.csdn.net/fengbingchun/article/details/108421641 其它架构: https:/