+ -
当前位置:首页 → 问答吧 → c++ 反汇编是是dos汇编还是windos汇编??

c++ 反汇编是是dos汇编还是windos汇编??

时间:2011-11-28

来源:互联网

这种汇编出现 eax,说明是32位的

但是不知道是保护模式dos汇编 还是windows的32汇编??,

汇编是不是和c++一样的对象

在控制台下是dos程序,可视化的叫windos程序啊???


想弄清楚这些概念,树上不会说的, 一来就是8086 , 不会说这是什么汇编


作者: chouxiaoya1114   发布时间: 2011-11-28

本程序通过编译,运行正确。
Code Segment
  Assume CS:Code,DS:Code
VAR1 db 35h
RES1 db ?
RES2 db ?
Start: push cs
  pop ds ;使数据段与代码段同段
; 设定字节型变量VAR1的内容为35H,编写程序将VAR1的高4位与低4位分离,分别作为低4位保存在RES1和RES2中,这两个变量高4位置0。
  mov al,VAR1 ;读入字节型变量VAR1的内容
  xor ah,ah
  mov cl,4 ;移位次数
  shl ax,cl
  shr al,cl ;左移4位,拆分高4位与低4位
  mov RES1,ah ;保存原来的高4位
  mov RES2,al ;保存原来的低4位
Exit_Proc: mov ah,4ch ;结束程序
  int 21h
Code ENDS
  END Start ;编译到此结束

这段代码没有问题啊,为什么无法link成 exe呢???

作者: chouxiaoya1114   发布时间: 2011-11-28

8086当然是保护模式下的汇编了
16位程序都是保护模式的汇编。

作者: akirya   发布时间: 2011-11-28

这段代码,用ml.exe :ml.exe 1.asm 1.obj 立即可以生成1.obj 1.exe

用masm却不可以啊??/ 什么原因啊

有什么区别,我的 环境是xp ,

下载之后,就有三个exe : ml,masm ,link

程序见2楼




引用 1 楼 chouxiaoya1114 的回复:
本程序通过编译,运行正确。
Code Segment
Assume CS:Code,DS:Code
VAR1 db 35h
RES1 db ?
RES2 db ?
Start: push cs
pop ds ;使数据段与代码段同段
; 设定字节型变量VAR1的内容为35H,编写程序将VAR1的高4位与低4位分离,分别作为低4位保存在RES1和RES2中,这两个变量高4位置0……

作者: chouxiaoya1114   发布时间: 2011-11-28


16位 书是8086 ,但是我们的电脑绝对是32位活以上,对吧?? 从cpu来看, 绝对是386及以上


16位只是实模式。。。。


这样的话, 不安装dos操作系统,那么我们的代码运行环境是32位 保护模式!!!

至于为什么出现一些int 21h(调用dos)

我也搞不清楚

难道说 模式是 虚拟模式!!!!!! 或者 保护模式




引用 2 楼 akirya 的回复:
8086当然是保护模式下的汇编了
16位程序都是保护模式的汇编。

作者: chouxiaoya1114   发布时间: 2011-11-28

现在想找个DOS系统都难哦

平常所说的DOS只是微软在Windows平台下模拟的一个命令行而已

作者: duke56   发布时间: 2011-11-28




懂了, 不用纯dos的 都是保护模式汇编

可视化的也叫windos汇编 比如:罗云并的

非可视化的叫 dos汇编, 

纯dos的很少出现了



引用 5 楼 duke56 的回复:
现在想找个DOS系统都难哦

平常所说的DOS只是微软在Windows平台下模拟的一个命令行而已

作者: chouxiaoya1114   发布时间: 2011-11-28

引用 4 楼 chouxiaoya1114 的回复:
16位 书是8086 ,但是我们的电脑绝对是32位活以上,对吧?? 从cpu来看, 绝对是386及以上


16位只是实模式。。。。


这样的话, 不安装dos操作系统,那么我们的代码运行环境是32位 保护模式!!!

至于为什么出现一些int 21h(调用dos)

我也搞不清楚

难道说 模式是 虚拟模式!!!!!! 或者 保护模式




引用 2 楼 ……

xp 自带dos虚拟机。
win7就没了。

作者: akirya   发布时间: 2011-11-28

是CPU的汇编。

作者: pathuang68   发布时间: 2011-11-28



我只是想搞清楚概念而已

现在的运行环境都是windows的,

书上是不会说的

我不想成为: 看到visual c++ 就说,这是c++的人, 我是很理解为什么有的人一看到visual c++就说,这是c++ , 这是教材导致的, 老师又不说


学习汇编 8086教材, 根本不会说,虽然你学习的是8086 16 位,有时候看反汇编,其实是32位

32位汇编是 保护模式,不存在 16位的 16位去访问20根地址线




引用 8 楼 pathuang68 的回复:

是CPU的汇编。

作者: chouxiaoya1114   发布时间: 2011-11-29


Code Segment
  Assume CS:Code,DS:Code
VAR1 db 35h
RES1 db ?
RES2 db ?
Start: push cs
  pop ds ;使数据段与代码段同段
; 设定字节型变量VAR1的内容为35H,编写程序将VAR1的高4位与低4位分离,分别作为低4位保存在RES1和RES2中,这两个变量高4位置0。
  mov al,VAR1 ;读入字节型变量VAR1的内容
  xor ah,ah
  mov cl,4 ;移位次数
  shl ax,cl
  shr al,cl ;左移4位,拆分高4位与低4位
  mov RES1,ah ;保存原来的高4位
  mov RES2,al ;保存原来的低4位
Exit_Proc: mov ah,4ch ;结束程序
  int 21h
Code ENDS
  END Start ;编译到此结束


这说这代码吧??是16位的

我的环境是xp的, 我从来没有装过虚拟机,dos!!!!


里面有int 21h, 是调用dos的 , 是不是说明 它运行于 虚模式啊???

作者: chouxiaoya1114   发布时间: 2011-11-29

引用 10 楼 chouxiaoya1114 的回复:
Code Segment
Assume CS:Code,DS:Code
VAR1 db 35h
RES1 db ?
RES2 db ?
Start: push cs
pop ds ;使数据段与代码段同段
; 设定字节型变量VAR1的内容为35H,编写程序将VAR1的高4位与低4位分离,分别作为低4位保存在RES1和RES2中,这两个变量高4位置0。
mov al,VAR……

都说了XP 自带dos虚拟机,为了兼容16位程序。
中断啥的都会转化到win32的相关函数来实现

作者: akirya   发布时间: 2011-11-29

我以为虚拟机是vm 那种,需要下载安装虚拟机

懂了,在xp下要么是虚模式,要么是 保护模式




引用 11 楼 akirya 的回复:
引用 10 楼 chouxiaoya1114 的回复:
Code Segment
Assume CS:Code,DS:Code
VAR1 db 35h
RES1 db ?
RES2 db ?
Start: push cs
pop ds ;使数据段与代码段同段
; 设定字节型变量VAR1的内容为35H,编写程序将VAR1的高4位与低4位分离,分别作为低4位保存在RES1和RES2中,……

作者: chouxiaoya1114   发布时间: 2011-11-29

dos,windos,保护模式,都与汇编无关,

汇编接近机器硬件指令(机器指令)。

认为汇编和c++一样的对象也无不可。

个人见解,非专业砖家,不过就这个意思,8910没错

作者: awtool   发布时间: 2011-11-29