社区
汇编语言
帖子详情
linux 下汇编问题,高人指教!!!!!
green__hand
2007-08-13 10:11:25
1. 在linux下是不是不能像8086汇编那样改变cs的值,mov ax,0ah mov cs,ax 这样是不是不行的?
2.如果程序使用实地址模式,那么所有段寄存器都指向零线性地址,并且不会被程序改动。所有指令码、数据元素和堆栈元素都是通过他们的线性地址直接访问的。-------这句话是不是错了,还是我没理解。好像8086汇编下不是这样啊,也没直接指向零线性地址啊?
3. globl这个东西是做什么的,没看明白书上的解释?
...全文
364
16
打赏
收藏
linux 下汇编问题,高人指教!!!!!
1. 在linux下是不是不能像8086汇编那样改变cs的值,mov ax,0ah mov cs,ax 这样是不是不行的? 2.如果程序使用实地址模式,那么所有段寄存器都指向零线性地址,并且不会被程序改动。所有指令码、数据元素和堆栈元素都是通过他们的线性地址直接访问的。-------这句话是不是错了,还是我没理解。好像8086汇编下不是这样啊,也没直接指向零线性地址啊? 3. globl这个东西是做什么的,没看明白书上的解释?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
16 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
swordsman
2011-06-19
打赏
举报
回复
汇编对我来说太难了。真真的难。!
日立奔腾浪潮微软松下联想
2007-08-20
打赏
举报
回复
怎么做?
你不是都看了“intel开发者文档第二卷”吗?:)
你的看法是在实模式和保护模式下试出来的吧。
intel的书上虽然写了会引发无效操作码异常,
不过它并没有写在8086/8088上根本没有无效操作码异常,
在8086/8088上不识别的指令是作为NOP执行的,
通常这样执行会导致指令序列错乱,程序跑飞了。
一般会死机,但不是必然如此。
dxcnjupt
2007-08-20
打赏
举报
回复
嗯,换成8EC8确实可以反编译
---------------------------------
不过我认为是反编译器没有对特殊的“操作码+操作数”组合进行处理。
因为正向的编译器不能编译mov cs,ax这个指令的--或者说只有nasm不能编,其它汇编器可以,我没试过。
还有一个问题
如果在8086下碰到8EC8,CPU会怎么做???
如果在保护模式下碰到8EC8。CPU又会怎么做???
我的看法是1直接死机;2进入06号异常
日立奔腾浪潮微软松下联想
2007-08-19
打赏
举报
回复
是8E C8。
mov cs,ax在8086的设计之初就存在了,后来intel由于某种原因禁用了它。
估计是想限制段间转移吧。
但是指令是存在的,连最老的debug都能识别。
dxcnjupt
2007-08-19
打赏
举报
回复
nec的问题算我弄错了,但是你要说x86上面有这个指令,我可不能接受
nec兼容x86 = x86的指令nec都有,x86没的指令nec也可以做扩展
嗯,还有一个问题
并不是随便把一个操作码和一个操作数组合起来就是合法的代码。关键要看CPU能不能识别。刚才做了个实验,用ndisasm反编译E8C8......你自己试一下吧。
你说E8 C8可以进行MOV到CS的操作
那么
1,它能执行吗,如果能执行,为什么文档说不允许??
2,如果不能执行,你说它会产生异常,那么是什么异常呢??
dxcnjupt
2007-08-19
打赏
举报
回复
那你给我解释一下
为什么用nasm不能编译,报错说“非法指令”
是不是nasm做的太烂了,有漏洞
明天装个masm也试一下
dxcnjupt
2007-08-17
打赏
举报
回复
我们说的是IA体系又不是v20。明天我们公司也做个CPU,给通用寄存器取名叫CS,那不就....
intel开发者文档第二卷写的很清楚,mov到CS是不允许的
而且也没有对应这个指令的机器码
没机器码,你要它怎么存在
或者你找个nasm试一下,看看你的mov cs,ax能不能编译通过
日立奔腾浪潮微软松下联想
2007-08-17
打赏
举报
回复
NEC 的V20/V30/V40都是x86兼容处理器,不是什么你们公司做的通用处理器叫CS的东西。
mov cs,ax 的码是8e c8,从8086开始就一直存在。
intel文档上是说了不能mov cs,ax,但是并没有说指令不存在。:)
日立奔腾浪潮微软松下联想
2007-08-16
打赏
举报
回复
mov cs,ax 指令是存在的,只是会导致异常而已,
而且nec v20确实可以执行mov cs,ax,这也是区分8086和v20的一个方法。
dxcnjupt
2007-08-16
打赏
举报
回复
mov 到CS是不允许的,只能mov ax,cs
见intel开发者文档第二卷对MOV指令的解释
global 导出符号,连接时能被其它模块看到
比如你的工程有A.ASM B.ASM两个文件
B.ASM可以使用A.ASM中的global符号
.globl _start比较特殊,相当于声明这是整个程序的起点。--当然这也取决于你的链接器和连接脚本,不过暂时还不用学这么多。
green__hand
2007-08-16
打赏
举报
回复
global 导出符号,连接时能被其它模块看到-------------------------------------------------------链接时能被其他模块看到是什么意思?有什么作用?能不能解释的详细点?
green__hand
2007-08-15
打赏
举报
回复
# cstest.s - An example of the cs register
.section .data
data:
.short 15
.section .text
.globl _start
_start:
movw $data, cs
movl $10, %ebx
int $0x80
globl例,高人指点。globl作用,谢谢!!
日立奔腾浪潮微软松下联想
2007-08-15
打赏
举报
回复
这个就类似MASM/TASM/NASM中的public xxx指示。
david2083() 前面已经说了。
日立奔腾浪潮微软松下联想
2007-08-13
打赏
举报
回复
mov ax,cs;mov cs,ax都有啊。
david2083
2007-08-13
打赏
举报
回复
似乎x86没这条指令,改CS只能用 jmp 或 call
global 导出符号,连接时能被其它模块看到
日立奔腾浪潮微软松下联想
2007-08-13
打赏
举报
回复
1. 当然可以,但是要ring0权限才行。
2. 这应该是说flat模式,不分段,也就是只有一个段。
3. 确实不知道globl是什么。也许global?这个词的意思是全局的、全球的等等,没有上下文很难说是什么意思。
Linux
0.11内核源码解读第一季——
汇编
启动部分
本课程分析
Linux
0.11内核源码的
汇编
启动部分,并讲解涉及到的软硬件等相关知识,包括x86的保护模式,分页机制。
基于
汇编
的 C/C++ 协程 - 切换上下文
在前一篇文章《基于
汇编
的 C/C++ 协程 - 背景知识》中提到一个用于 C/C++ 的协程所需要实现的两大功能: 协程调度 上下文切换 其中调度,其实在技术实现上与其他的线程、进程调度没有什么特别的差异,同时也要看...
我为什么放弃
linux
内核学习,
linux
内核学习感悟与建议
lifengnux 于 2014-08-24 20:48:06发表:现在也在工作需要研读
linux
内核,希望一起进步yan20140808 于 2014-08-12 11:01:08发表:正在看 《
linux
内核设计的艺术》,看到 开机启动时间的设置,但是不是很明白CMOS内部的...
做嵌入式
linux
驱动的前途何在
做嵌入式
linux
驱动的前途何在? 或者说,怎么才能做好这一行? 我做嵌入式驱动开发已经一年多了,感觉没学到多少东西。 从网络驱动到CAN驱动、从dataflash驱动到NAND/NOR FLASH驱动、从CF/IDE驱动到各种嵌入式...
做嵌入式驱动的前途何在
做嵌入式驱动的前途何在 ...从网络驱动到CAN驱动、从dataflash驱动到NAND/NOR FLASH驱动、从CF/IDE驱动到各种嵌入式文件系统、从LCD/VGA驱动到音频驱动、从IAR到ADS再到GCC、Ucos到
linux
、从I2C总线到SPI再到S
汇编语言
21,453
社区成员
41,602
社区内容
发帖
与我相关
我的任务
汇编语言
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
复制链接
扫一扫
分享
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章