32位汇编语言复习文档

汇编使用C语言的参数
printf的参数从右向左push,最后再 call crt_printf 和 call crt_scanf;
调用伪指令 CALL

.686
.model flat, stdcall
.stack 4096
INCLUDE Irvine32.inc
INCLUDELIB Irvine32.lib
include F:\masm32\include\msvcrt.inc
includelib F:\masm32\lib\msvcrt.lib
.data
me_str db 'hello world! %x\n',0
me_input_int db '%d'
int32_val dd 123
ExitProcess proto,dwExitCode:dword 
.code 
main proc
	push offset int32_val
	push offset me_input_int
	call crt_scanf;
	push int32_val
	push offset me_str
	call crt_printf
	invoke ExitProcess,0
main endp 
end main

CF是无符号数溢出标志,OF是有符号数溢出标志

db定义字节类型变量,一个字节数据占1个字节单元,读完一个,偏移量加1 AL 8位
Define byte

dw定义字类型变量,一个字数据占2个字节单元,读完一个,偏移量加2 AX 16位
Define word

dd定义双字类型变量,一个双字数据占4个字节单元,读完一个,偏移量加4 EAX 32位 define dword

Dq 存放64位的双精度数据 8个字节 一般使用FPU寄存器来计算,但是也可以使用强制类型转换赋值给通用寄存器

使用
DD 最多存放2个WORD,4个字符 ,也就是Dword的大小,DD就是DWORD ,DOUBLE WORD
是伪指令的写法
两个字符为一个byte,
2个字节为DWORD,
也就是32位,4个BYTE

int32_val2 dd ‘1234’
定义dd ,目标内存为 倒序
int32_val2 dd ‘12345’ 报错,定义的字符串过大,超出32位的存放大小

0X 39 30
57 48
57=316+9
48=3
16

0X 3039 =3163+9*162+316 = 12345

通过小端对齐,把高字节的39放在内存高位,所以为

39 30

理论上,DD 类型的数据可以存放为2^32次方的数据

DW 16位 2个字节 1个WORD 初始值可能为 00 00 首先存放在低字节处,好歹大小也可以有2^16

0x:d2 4d
D:19922

实际存储为4DD2 还是小段对齐,优先放在低位 ,在存放到高位 的内存

12*16+7=199

7*16+11=123

00C7

007B

7B(0X) =7*16+11=123

MOV AH,7B

EAX:00EA 7B 01

AX AH AL

MOV AL ,7B

移动到AL 寄存器的位置

9*16+1=145

255+22 ==========&

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值