社区
汇编语言
帖子详情
怎么调试包含有80386以上指令的汇编程序?
tyingzi
2003-10-15 10:29:54
用TD或DEBUG怎么总是反汇编后不对?
...全文
84
35
打赏
收藏
怎么调试包含有80386以上指令的汇编程序?
用TD或DEBUG怎么总是反汇编后不对?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
35 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
giantzz
2003-10-25
打赏
举报
回复
多简单的问题,搞的这么乱
aabiao
2003-10-24
打赏
举报
回复
我的观点:
的确划分标准难说,没意思。但DOS中完全可以用32位。
能否可以用32位寄存器与CPU设置有关,默认是.8086,还有.386/.386p有P的是保护模式
TD(就是DOS的不是TD32)完全可以调试32位的,我一直如此。怎么楼上的都说td不行?
汇编用MASM5即可,结构:
.model small
.386 这句必须在.model后,否则反汇编不对,哪位知道请告知。是BUG?
.data
.code
mov ax,1234h
mov eax,12345678h
push 1234h
shl ax,4
mov ah,4ch
int 21h
SoRoMan
2003-10-23
打赏
举报
回复
to:SnHnBn(大可达)
不爭了,在劃分多少位程序上,你那種有你的道理。我保留我的看法(起碼有系統靠image格式判別多少位的程序,雖然不完全科學。)不同的角度而已。
to:樓主
嫌那些TRW2000,SOFTICE,OLLYDBG之類煩人,用debug32或phdebug。去google一個吧。
junhli
2003-10-22
打赏
举报
回复
人家作了防debug的处理,反汇编不出来很正常,这根16位32位没什么关系。
SnHnBn
2003-10-22
打赏
举报
回复
很显然一个包含有32bit指令的程序,是不能在16bit CPU上运行的。因此,你所举的两个例子,我认为是32bit的程序。当然另一种32bit程序说法是看Image格式,但是我认为这不是严格的定义。Image格式是多少bit的,其实基本上仅仅取决于寻址的位数,因此就又产生了一种误解“起碼如果沒有涉及32位尋址(flat memory)。我們可以認為是16位。
”。寻址能力只是运算器和寄存器位数的一个表现方面而已。如果一个Image是自己定义自己装载的话,应该怎样算?
SnHnBn
2003-10-22
打赏
举报
回复
指令的划分其实很明显,我前面已经说过“一是寄存器的位数,二是运算器的运算位数。”因为这两项指标直接表明执行该指令的CPU具有的运算位数,区分32bit或是16bit CPU正是如此。如果一个CPU(x86)能够执行add eax,edx 这样的指令,你说不能明确表明它是一个32bitCPU吗?指令的划分其实很自然,哪里来的生硬?
如果连划分都没有,你们在谈论16bit,32bit的时候,其实不都在说废话?
SoRoMan
2003-10-22
打赏
举报
回复
赫赫,我們其實知道的太少。也許根本就沒有必要劃分16/32bit程序,甚至是指令。就像mov ah,0之類,是8位指令?嚴格意義上,都是有序的bit運算的集合,非要生硬的劃分沒有什麼意義。沒什麼意義。。。
SoRoMan
2003-10-22
打赏
举报
回复
程序是指令的集合。
由於兼容,就存在16/32bit指令混用的情況,看看下面兩個匯編代碼:
.386
code segment
assume cs:code
start:
mov eax,0
mov ax,0
code ends
end start
.386
code segment use32
assume cs:code
start:
mov eax,0
mov ax,0
code ends
end start
如果非要劃分上面程序是16還是32bit程序,樓上恐怕會說是32bit程序。這樣的劃分有確定的依據嗎?看看機器碼。我說1為16位程序。
Lymtics
2003-10-22
打赏
举报
回复
呵呵,解壳在前,16/32在后....
大哥们别学Hydradisk 喷口水啊~~~~
到底用什么工具最好(如何理解看各位大哥)?
我想知道...........
SoRoMan
2003-10-21
打赏
举报
回复
我上面已经说过CPU工作模式和16/32位汇编没有必然联系.实模式下可以用16/32bit解码,保护模式也可以用16/32位解码.
"看来楼上只用过X86指令集,所以想当然的自己划分16bit和32bit。"??
对于那些不兼容16位架构的CPU,哪里谈的上16/32位?只要那些为了兼容16位指令,不管X86也好,alpha axp也好,在划分16bit和32bit应该是同样的道理.
SnHnBn
2003-10-21
打赏
举报
回复
“在划分16bit和32bit应该是同样的道理”
说了半天,你还是没有说出你的道理。
Areslee
2003-10-20
打赏
举报
回复
不是这样吧,照楼主的问法,LGDT/SGDT
之类的指令算是32位指令吗?但它们就是386以上的指令。
SnHnBn
2003-10-20
打赏
举报
回复
说到指令前缀,我大概明白了你们的划分方法。
在32bit保护模式下,指令默认解码为32bit操作。若做16bit操作需要加16bit前缀。
在16bit保护模式和实模式下,指令默认解码为16bit操作。若做32bit操作需要加32bit前缀。
因为这个默认解码方式,所以32bit保护模式被认为是32bit模式,而实模式被认为是16bit模式。到这里都没有什么问题,问题就是在32bit模式下运行指令才能算32bit汇编?在实模式运行指令就算16bit汇编?这个好像确实不太恰当,再往后推就成了做实模式下做32bit运算的指令也成了16bit汇编,这个概念明显是错误的。
SnHnBn
2003-10-20
打赏
举报
回复
哪你们又是如何区分32bit汇编和16bit汇编的呢?真奇怪啊……
不会是根据PE NE MZ等程序映象格式吧?汇编指令的位数似乎和Image没有必然联系啊?
至于楼主的问法,我只是猜想是TD不能识别32位汇编指令格式而已。猜想而已,我也没有验证。后来才发现,TD也能够识别32bit指令,楼主的问法确实有点怪,大概他用的版本太老,不能识别32bit指令前缀(实模式下做32bit操作需要)。
而关于TD32只能够识别PE和DPMI的程序Image,这一点是我搞错了,很久没用,忘记了。DOS的时候我用它跟过DPMI的游戏,事实上Load的时候已经自动切换到保护模式了。
SnHnBn
2003-10-20
打赏
举报
回复
看来楼上只用过X86指令集,所以想当然的自己划分16bit和32bit。
SoRoMan
2003-10-20
打赏
举报
回复
TO: SnHnBn(大可达)
你也許是按照像多少位的計算機那樣劃分多少位程序。涉及到32位的寄存器或操作數就應算是32位程序了,就像在8086年代,不會出現32位程序,或是eax。這只是一種劃分方法而已。實際上有些地方不是這樣劃分的,並沒有嚴格定義。我所說的16位匯編編譯器有很多,像masm和tasm早期版本,如tasm4.1裡的幫助文件注有for 16bit的,BL要說它是16bit的,你說它的劃分依據是什麼?它照樣編譯 xor eax,eax.
至於16位跟實模式就更是沒必然聯系了。在實模式下可以輕易處理32位的寄存器,訪問32位地址。
INTEL一味的兼容,造成了很多問題的“兼容”...
SnHnBn
2003-10-18
打赏
举报
回复
如果你们觉得我说的不对,你们给出一个严格的判断标准吧,看看合不合理。
SnHnBn
2003-10-18
打赏
举报
回复
多少位其实有一个很明确的概念,为什么这里这么混乱呢?
一是寄存器的位数,二是运算器的运算位数。
这里(星星和斑竹做代表)看来是喜欢把CPU模式和指令位数乱搞一通了。
事实上,你们所说的16bit准确的说法是实模式(或者是V86模式)。其实,搂主说的是在实模式下反汇编32bit指令。
但是32bit指令不能被TD识别(因为都有一个32bit前缀),但是可以用TD32,这也是一个能够在实模式下运行的程序,同时也能运行在保护模式。
哎,这里的人很多都是初学者,被你们几个星星和斑竹混淆了概念可是一件糟糕的事情。
W32API
2003-10-18
打赏
举报
回复
INTEL 指令集并没有对这些做严格的限制,所以不能仅凭寄存器位宽来做鉴别。
SnHnBn
2003-10-18
打赏
举报
回复
楼上,当然可以。32bit程序又不是不能用16bit指令。
加载更多回复(15)
gdb
调试
(c语言和汇编
指令
)
环境: ubuntu 18.04 gdb 背景:
调试
Intel ipp库 目录一、gcc的安装二、icc的安装三、编译器的使用3.1 基本用法3.1.1 查看命令文档3.1.2 基本的编译命令3.1.3 运行目标文件3.2 多文件编译3.2.1 源码3.2.2 编译命令3.2.3 运行命令3.3 编译双线性变换demo3.3.1 编译命令3.3.2 运行命令3.4 编译金字塔demo3.4.1 编译命令3.4.2 运行命令三、gdb的安装方法1 (推荐)apt安装gdb方法2 源码安装测试四、gdb的使.
windows64位搭建汇编(
包含
汇编dosbox , masm文件,link文件和debug
调试
)以及debug
调试
命令(dosbox
调试
汇编程序
的简单使用教程)
windows64位搭建汇编(
包含
汇编dosbox , masm文件,link文件和debug
调试
)以及debug
调试
命令(dosbox
调试
汇编程序
的简单使用教程) 1.下载dosbox,下载好后点击安装 2.下载好debug.exe,masm.exe,link.exe。并放到一个文件夹下,这里我放到的是f:\hb 3.打开dosbox,输入mount c f:\hb 这里的mount作用是建立一个虚拟的盘符,所以字母可以随便。例如(c盘可以换成g盘) 4.输入c:进入c盘,并用dir看c盘里面有
汇编:汇编
指令
分类
使用汇编语言编写一个完整的程序,步骤大致如下:这节我们来看下一个最简单的汇编代码
包含
哪些内容。下面是一段简单的汇编语言的代码: 从上面的代码可以看出,汇编语言由两类
指令
组成:1、汇编
指令
2、伪
指令
............
80386
汇编
80386
汇编知识 与汇编语言略有不同,是一门全新的编程语言,尽管继承了汇编语言的语法. 80836寄存器 通用寄存器(EAX EBX ECX EDX,ESP,EBP,ESI,EDI) 段寄存器(CS SS DS ES FS GS)
指令
寄存器和变址寄存器(EIP EFLAGS) 系统地址寄存器(GDTR IDTR LDTR … 控制寄存器(CR0 CR1 CR2 CR3 CR4)
调试
寄存器...
汇编程序
伪操作
指令
汇编程序
伪操作
汇编程序
的 . 伪操作
汇编程序
中以.开头的名称并不是
指令
的助记符,不会被翻译成机器
指令
,而是给汇编器一些特殊指示,称为汇编指示(Assembler Directive)或伪操作(Pseudo-operation) .section指示把代码划分成若干个段(Section),程序被操作系统加载执行时,每个段被加载到不同的地址,操作系统对不同的页面设置不同的读、写、执行权限。 .section .text .text段保存代码,是只读和可执行的,后面那些
指令
都属于.text段。 .se
汇编语言
21,459
社区成员
41,601
社区内容
发帖
与我相关
我的任务
汇编语言
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
复制链接
扫一扫
分享
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章