社区
汇编语言
帖子详情
请问为什么给通用寄存器赋值都有错?
fangxu1999
2007-06-20 03:33:38
我用的是MASM611,代码很简单,可是就是不对,请问各位为什么啊,谢谢了
.386
.model flat
.stack
.data
.code
start: mov eax,12345678h ;;为什么该赋值语句执行完毕后eax中内容为0000566A?
end start
...全文
175
6
打赏
收藏
请问为什么给通用寄存器赋值都有错?
我用的是MASM611,代码很简单,可是就是不对,请问各位为什么啊,谢谢了 .386 .modelflat .stack .data .code start: moveax,12345678h;;为什么该赋值语句执行完毕后eax中内容为0000566A? endstart
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
fangxu1999
2007-06-20
打赏
举报
回复
我刚刚没有仔细看,刚刚开始的那个就是32位代码段
.386
.model small
32位段
_TEXT . . . . . . . . . . . . . 32 Bit
.model small
.386
是16位段
_TEXT . . . . . . . . . . . . . 16 Bit
书上还是对的。
生成的代码:
32位段直接使用32位操作数
mov eax,12345678h
B8 12345678
而16位段使用了操作数长度前缀
mov eax,12345678h
66| B8 12345678
可是在执行过程中,16位段IP取址并执行正常,一下子把这条指令66B812345678取完了。
32位段中EIP把B812345678分成了两段来取:B87856和3412,
前者对应于MOV AX,5678,后者对应于XOR AL,12
出错问题在于取指不对,请问怎么办啊.
fangxu1999
2007-06-20
打赏
举报
回复
谢谢啦,书上将.model和.386的次序讲错了。
不过在VC++中不能简单地改变这两条伪指令的次序啊,
改成如下之后:
.model flat,c
.386
public product
.code
......
报错了:
error A2085: instruction or register not accepted in current CPU mode
error A2013: .MODEL must precede this directive
请问该怎么办啊?
大熊猫侯佩
2007-06-20
打赏
举报
回复
就是啊!看看你的代码段是16位的吧?
fangxu1999
2007-06-20
打赏
举报
回复
果然是有问题的,MASM把这条语句汇编成了:
MOV AX,5678
XOR AL,12
两条。
可是如何才能按照愿意进行赋值呢?EAX不是32位的寄存器吗?
zhgwbzhd
2007-06-20
打赏
举报
回复
不应该吧。
大熊猫侯佩
2007-06-20
打赏
举报
回复
跟踪运行时的指令,看看你把什么值赋进去了。
x86汇编语言给段寄存器
赋值
x86汇编语言给段寄存器
赋值
;
通用寄存器
和段寄存器
8086/8088
通用寄存器
的通用性表现在: 这些寄存器除了各自规定的专门用途外,他们均可以用于传送和暂存数据,可以保存算术逻辑运算中的操作数和运算结果; 8个
通用寄存器
的专门用途如下: AX 字乘法,字除法,字I/O BX 存储器指针 CX 串操作或循环控制中的计数器 DX 字乘法,字除法,间接I/O SI 存储器指针(串操作
汇编语言给低位寄存器或高位寄存器
赋值
1
assume cs:codesg codesg segment xjazz: mov ax, 2000H ;ax=2000H mov ds, ax ;ds=ax=2000H mov al, [0] ;al=00 mov bl, [1] ;bl=01 mov cl, [2] ;cl=02 mov dl, [3] ;dl=03 mov ax, 4C00H ...
ARM 37 个
通用寄存器
详解
一、简介 1、ARM 总共有 37 个寄存器,但是每种模式下最多只能看到 18 个寄存器,其他寄存器虽然名字相同,但是在当前模式不可见。 2、例如,对 r13 这个名字来说,在 ARM 中共有 6 个名叫 r13(又叫 sp)的寄存器,但是在每种特定处理器模式下,只有一个 r13 是当前可见的,其他的 r13 必须切换到它们的对应模式下才能看到。这种设计叫影子寄存器(banked register)。 3、这 37 个寄存器的地址都是不一样的,虽然它们可以有相同的名字。同时,有些寄存器甚至还有别名,比如在汇
系统调用和进程切换时的寄存器信息保存在哪里?
系统调用是什么??? 系统调用是操作系统为用户提供的一系列API;系统调用将用户的请求发给内核,内核执行完以后,将结果返回给用户; 以open为例,进行系统调用: 分析Linux2.6.11版本 <1>通过在unistd.h中的函数名的拼接; <2>找到对应的系统调用号 <3>然后将此系统调用号通过eax寄存器告知内核,在执行0x80号中断的时候,eax寄存器中放的是5; <4>将
汇编语言
21,459
社区成员
41,600
社区内容
发帖
与我相关
我的任务
汇编语言
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
复制链接
扫一扫
分享
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章