社区
汇编语言
帖子详情
关于masm6.14 16位和32位程序
zhushouqqq
2009-06-06 11:54:20
最近在看杨季文的书
第十章的第一个例子 我在masm6.14下编译不通过
有网友说 是我用masm的时候没有指定段是16位 还是32位
我想问的问题有
1 masm如果不加段说明 默认的是16位 还是32位
2 如果程序里有16位 和32位的代码(实模式到保护模式再到实模式) 那么如何使用连接器 才能正确连接呢 用什么版本的连接器
3 谁能介绍下关于masm中文的 资料 E文看不懂 - - !!
急 再线等60分钟
...全文
275
8
打赏
收藏
关于masm6.14 16位和32位程序
最近在看杨季文的书 第十章的第一个例子 我在masm6.14下编译不通过 有网友说 是我用masm的时候没有指定段是16位 还是32位 我想问的问题有 1 masm如果不加段说明 默认的是16位 还是32位 2 如果程序里有16位 和32位的代码(实模式到保护模式再到实模式) 那么如何使用连接器 才能正确连接呢 用什么版本的连接器 3 谁能介绍下关于masm中文的 资料 E文看不懂 - - !! 急 再线等60分钟
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
zhushouqqq
2009-06-09
打赏
举报
回复
[Quote=引用 3 楼 cnzdgs 的回复:]
1 masm如果不加段说明 默认的是16位 还是32位
.model flat模式是32位,其它模式如果在.model之前指定指令集则默认32位,其余情况默认为16位。
2 如果程序里有16位 和32位的代码(实模式到保护模式再到实模式) 那么如何使用连接器 才能正确连接呢 用什么版本的连接器
用MASM附带的link.exe即可,没有特别的地方。
3 谁能介绍下关于masm中文的 资料 E文看不懂 - - !!
不锻炼永远看不懂。
[/Quote]
不是知道你说的link是什么版本
PE不能在在DOS下执行吧。
link3是 le格式的 link5是PE格式的
zhushouqqq
2009-06-09
打赏
举报
回复
额。。
问题已经解决了
用masm614编译 ml /c test.asm
然后 用link3连接的
因为dos程序是/omf格式
zhushouqqq
2009-06-06
打赏
举报
回复
无人问津?
cxdzxc
2009-06-06
打赏
举报
回复
[Quote=引用 15 楼 cxdzxc 的回复:]
LGDT qword ptr cs:GDTR ;masm5.0在这里要用qword,因为MASM5.0有这个BUG,其它MASM6.XX要用fword
[/Quote]
mydo看看我在这里链接里15楼的回复吧
http://topic.csdn.net/u/20090311/11/937a87ca-5599-466b-bc23-8f87f25228d5.html
大熊猫侯佩
2009-06-06
打赏
举报
回复
出错提示?
cxdzxc
2009-06-06
打赏
举报
回复
如果使用.386P伪定义的话,默认的编译方式是32位的,要正确编译混合代码模式中的16位段的程序,必须使用USE16编译伪指令,在后面的32位程序段重新使用USE32伪指令重新定义回32位编译方式,这里有以前发的一个帖子
http://topic.csdn.net/u/20090311/11/937a87ca-5599-466b-bc23-8f87f25228d5.html
,在14楼有一个这样的例子,但愿能对你有用了... ^_^
.386P
CSEG16 SEGMENT USE16
ASSUME CS:CSEG16
ORG 100H
START: cli
mov bx,offset cs:xianshixinxi_16
mov di,20*2
call xianshi_16
xor eax,eax
mov ax,cs
mov word ptr cs:seg_offset_16+2,ax
shl eax,4
xor ebx,ebx
mov bx,SEG CSEG_P32
SHL EBX,4
mov word ptr cs:cs_SEL32+2,bx
shr ebx,16
mov byte ptr cs:cs_SEL32+4,bl
xor ebx,ebx
mov bx,SEG CSEG_P16
SHL EBX,4
mov word ptr cs:cs_SEL16+2,bx
shr ebx,16
mov byte ptr cs:cs_SEL16+4,bl
xor edx,edx
mov dx,offset cs:gdt0
add eax,edx
mov dword ptr cs:GDTR+2,eax
LGDT qword ptr cs:GDTR
mov eax,cr0
or al,1
mov cr0,eax
db 0eah
seg_offset_16_P32: dw 0
dw offset cs_SEL32 - offset gdt0
xianshixinxi_16_dos_prog:
mov bx,offset cs:xianshixinxi_16_dos
mov di,80*2*3+20*2
call xianshi_16
return_dos:
mov ah,4ch
int 21h
xianshi_16:
mov ax,0b800h
mov es,ax
mov dh,0F4h
XIANSHI_16_1:
mov dl,cs:[bx]
cmp dl,0
je xianshi_over_16
mov word ptr es:[di],dx
add di,2
inc bx
jmp XIANSHI_16_1
xianshi_over_16: ret
;--------------------------------------------------------------------------------------------------------
gdt0: DQ 0
cs_SEL32: dw 0ffffh,0000,9a00h,00CFh
cs_SEL16: dw 0ffffh,0000,9a00h,0080h
DATA_SEL32: dw 0ffffh,0000,9200h,00CFh
GDTR: DW $-gdt0-1,0,0
;----------------------------------------------------------------------------------------
xianshixinxi_16 db "HELLO WORLD_DOS_16",0
xianshixinxi_16_dos db "RETURN DOS---QQ GROUP:83372198;QQ:750347821;
http://biosos.5d6d.com/
NAME:CXDZXC Address:LANZHOU DATE:2009-3-15 ",0
;----------------------------------------------------------------------------------------
CSEG16 ENDS
;-------------------------------------------------------------------------------------------------------
CSEG_P32 SEGMENT USE32
assume CS:CSEG_P32
MOV dx,DATA_SEL32 - gdt0
MOV es,dx
mov edi,0b8000h+80*2*1+20*2
XOR EBX,EBX
mov Ebx,offset cs:xianshixinxi_P32
mov dh,0F4h
xianshi_P32:
mov dl,cs:[ebx]
cmp dl,0
je xianshi_over_P32
mov word ptr es:[edi],dx
add edi,2
inc ebx
jmp xianshi_P32
xianshi_over_P32:
db 0eah
SEL_offset_P32_P16: dw 0,0,offset cs_SEL16 - offset gdt0
;----------------------------------------------------------------------------------------
xianshixinxi_P32 db "HELLO WORLD_P32",0
;----------------------------------------------------------------------------------------
CSEG_P32 ENDS
;-------------------------------------------------------------------------------------------------------
CSEG_P16 SEGMENT USE16
assume CS:CSEG_P16
mov edi,0b8000h+80*2*2+20*2
XOR EBX,EBX
mov bx,offset cs:xianshixinxi_P16
mov dh,0F4h
xianshi_P16:
mov dl,cs:[ebx]
cmp dl,0
je xianshi_over_P16
mov word ptr es:[edi],dx
add edi,2
inc ebx
jmp xianshi_P16
xianshi_over_P16:
mov eax,cr0
AND al,0FEH
mov cr0,eax
db 0eah
seg_offset_16: dw offset xianshixinxi_16_dos_prog,0
;----------------------------------------------------------------------------------------
xianshixinxi_P16 db "HELLO WORLD_P16",0
;----------------------------------------------------------------------------------------
CSEG_P16 ENDS
END START
cnzdgs
2009-06-06
打赏
举报
回复
1 masm如果不加段说明 默认的是16位 还是32位
.model flat模式是32位,其它模式如果在.model之前指定指令集则默认32位,其余情况默认为16位。
2 如果程序里有16位 和32位的代码(实模式到保护模式再到实模式) 那么如何使用连接器 才能正确连接呢 用什么版本的连接器
用MASM附带的link.exe即可,没有特别的地方。
3 谁能介绍下关于masm中文的 资料 E文看不懂 - - !!
不锻炼永远看不懂。
BAYNPU
2009-06-06
打赏
举报
回复
把源代码贴出来看看吧。
masm
6.14
安装版
在这个场景中,"
masm
6.14
安装版"被7zip压缩,意味着用户可以使用7zip软件来解压缩这个文件,从而获取到
MASM
6.14
的安装
程序
。7zip的使用通常包括创建、查看和管理压缩文件,其界面友好,适合Windows用户操作。 **...
汇编开发工具—
MASM
6.14
版
MASM
6.14
是
MASM
的一个较早版本,它支持80x86系列的处理器,并且能够生成
16
位
和
32
位
的机器代码。这个版本的
MASM
在当时的开发者中非常流行,因为它提供了一套强大的宏语言,允许
程序
员编写可重用的代码段,提高了开发...
masm
6.11,可升级到
6.14
此外,"
MASM
6.14
Command Line"可能包含关于如何在命令行环境下使用
MASM
6.14
的信息,如编译、链接和调试命令。 **汇编语言的应用** 汇编语言因其直接对应机器指令的特性,在系统级编程、硬件驱动编写、性能关键...
汇编语言
MASM
masm
6.0
汇编语言
MASM
MASM
6.0是1991年推出的,支持80486处理器,它对
MASM
进行重新组织,并...
MASM
6.0之后又有一些改进,微软又推出
MASM
6.11,利用它的免费补丁
程序
可以升级到
MASM
6.14
,支持到Pentium III指令系统。
MASM
32环境的介绍
- **
MASM
6.14
**: 在此版本中,进一步增强了对Pentium III SIMD指令集的支持。 ##### 2. 不同版本
MASM
的目标文件格式 - **DOS和Win
16
时期**:使用OMF(Intel Object Module Format)格式。 - **Win32时期**:从
MASM
...
汇编语言
21,496
社区成员
41,617
社区内容
发帖
与我相关
我的任务
汇编语言
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
复制链接
扫一扫
分享
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章