VS2022配置汇编以及常用知识(x86处理器)

1.VS2022配置汇编

1.打开VS2022

 2.创建新项目

3. Windows桌面向导

 4.创建

5.勾选空项目,确定

 6.生成依赖项,生成自定义

 7.勾选masm,确定

8.如图修改

 9.添加,新建项

10. .cpp后缀改为.asm

11.代码

TITLE Hello World!

OPTION CASEMAP:NONE									;大小写敏感,NONE:敏感;ALL:不敏感

INCLUDELIB ucrt.lib									;引入静态数据链接库,相当于#include <stdio.h>
INCLUDELIB legacy_stdio_definitions.lib
INCLUDELIB kernel32.lib								;ExitProcess

.MODEL FLAT,STDCALL									;FLAT:存储模式(平坦内存模式)
													;STDCALL:语言类型(从右向左压栈)
;声明需要使用的函数头 
printf		PROTO  C,								;printf,不由被调用者清栈,而是由调用者负责清栈
			:DWORD,									;格式控制串首地址
			:VARARG									;输出项 

scanf		PROTO  C,								;scanf,不由被调用者清栈,而是由调用者负责清栈
			:DWORD,									;格式控制串首地址
			:VARARG									;输入项 

ExitProcess PROTO,									;exit program 
			dwExitCode:DWORD						;return code

.DATA												;全局静态区 
	msg DB "Hello World!",							;分配字符串空间,存储“Hello,World!” 
	0dh, 0ah, 0										;回车,换行 

.CODE  
main PROC
	PUSH OFFSET msg									;获取msp的偏移值,压栈
	CALL printf										;调用上面声明的printf

	PUSH 0H
	CALL ExitProcess

main ENDP  
	END main

 

 12.设置断点,调试运行

13.打开寄存器

高亮插件:

1.AsmDube    该插件2022暂未更新

2.usertype.bat 详细https://blog.csdn.net/legend94rz/article/details/21830819

缺点:运行正常,但显示红线错误。

2.寄存器

a.8个32位通用寄存器,其中包含4个数据寄存器(EAX、EBX、ECX、EDX)、2个变址寄存器(ESI和EDI)和2个指针寄存器(ESP和EBP)

 

32位16位高8位低8位
EAXAXAHAL
EBXBXBHBL
ECXCXCHCL
EDXDXDHDL

只能用32位或16位名称访问

32位16位
ESISI
EDIDI
ESPSP
EBPBP

b.6个段寄存器(ES、CS、SS、DS、FS、GS)

 

c.1个指令指针寄存器(EIP)

 

d.1个标志寄存器(EFLAGS) 

PSW有6位条件状态位:AF、CF、ZF、PF、SF、OF; 
PSW有3位控制状态位:IF、TF、DF

进位标志CF:用于反映运算是否产生进位或借位。如果运算结果的最高位产生一个进位或借位,则CF置1,否则清0。当CF为1时用CY表示;当CF为0时用NC表示。

奇偶标志PF:用于反映运算结果低8位中“1”的个数。如果“1”的个数为偶数,则PF置1,否则清0。当PF为1时用PE表示;当PF为0时用PO表示。

辅助进位标志AF:算数操作结果的第三位(从0开始计数)如果产生了进位或者借位则将其置为1,否则清0。当AF为1时用AC表示;当AF为0时用NA表示。

零标志ZF:用于判断结果是否为0,结果为0,ZF置1,否则清0。当ZF为1时用ZR表示;当ZF为0时用NZ表示。

符号标志SF:用于反映运算结果的符号,运算结果为负,SF置1,否则清0。SF与运算结果的最高位相同。当SF为1时用NG表示;当SF为0时用PL表示。

溢出标志OF:反映有符号数运算是否溢出。如果运算结果超过了有符号数的有效表示范围,则OF置1,否则清0。当OF为1时用OV表示;当OF为0时用NV表示。

跟踪标志TF:当TF被设置为1时,CPU进入单步模式,主要用于程序的调试。

中断标志IF:决定CPU是否响应外部可屏蔽中断请求。IF为1时,CPU允许响应外部的可屏蔽中断请求。IF为1时用EI表示;IF为0时用DI表示。

方向标志DF:决定串操作指令执行时有关指针寄存器的调整方向。当DF为1时,每次操作后使ESI、EDI(SI、DE)递减,否则递增。DF为1时用DN表示;DF为0时用UP表示。

e.MMX寄存器

f.XMM寄存器 

 3.条件跳转助记符

 4.内部数据类型

5. 操作模式

6.Microsoft汇编器常见伪指令

  

 

 

  

 

 

NEAR属性(段内近调用): 调用程序和子程序在同一代码段中,只能被相同代码段的其他程序调用;
FAR属性(段间远调用): 调用程序和子程序不在同一代码段中,可以被相同或不同代码段的程序调用.

 7.常见符号

8.常见运算符

 

 9.常见指令

 

 

 

 

 

10.标识符

 11.寻址方式

获得数据或者数据地址信息的方式称为寻址方式。

(1)立即寻址;(2)寄存器址;(3)直接寻址;(4)间接寻址;(5)相对寻址;(6)基址变址寻址;(7)相对基址变址寻址;(8)隐含寻址;(9)基址寻址;(10)变址寻址;(11)数据串寻址;(12)直接端口寻址;(13)间接端口寻址;(14)段内直接寻址;(15)段内间接寻址;(16)段间直接寻址;(17)段间间接寻址。

一般的寻址方式只说前7类。

12.其他

将AX中的一个两位ASCII码十进制整数转换为非压缩十进制形式的指令是   AND AX,0F0FH

将AX中的一个两位非压缩十进制整数转换为十进制的ASCII码的指令是       OR AX,3030H

将AX中一个无符号二进制整数转换为非压缩十进制数的指令是 AAM

LEA能返回间接操作数的地址,还可以返回堆栈参数的地址,而OFFSET只能返回编译时已知的地址。

 信息来自《汇编语言 基于x86处理器 第7版》

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值