社区
汇编语言
帖子详情
关于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分钟
...全文
308
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
入门教程
本文介绍了微软宏汇编器
MASM
的历史、版本演变,并详细阐述了如何从安装、创建汇编
程序
、设置环境变量、编译、链接到运行
MASM
程序
的全过程,帮助初学者快速入门。
使用 Visual Studio 2022 写纯
32
位
汇编(intel风格)
本文详细介绍了如何在Visual Studio 2022中从零开始搭建
32
位
汇编语言开发环境,并实现一个简单的加法运算
程序
。内容包括创建项目、配置环境、编写与调试汇编代码等步骤。
MASM
系列编译器编译win32汇编
程序
步骤
本文详细介绍了
MASM
编译器的不同版本及其在Win32编程中的应用,包括
MASM
6.14
以上版本的ml.exe用法,以及如何使用Link链接COFF格式的obj文件生成可执行PE文件。文章还解释了不同版本
MASM
产生的obj文件格式差异,以及在使用高版本
MASM
进行Win32编程时必需的编译选项。
masm
32快速编辑器菜单翻译整理
本文详细整理了
MASM
32快速编辑器的各个菜单功能,包括工程菜单的编译、链接、运行等操作,工具菜单的图像编辑、颜色选择及代码处理工具,代码菜单的新建项目、转换文件类型等功能,转换菜单的文本与数据格式转换,以及脚本和帮助菜单的相关辅助功能。
汇编语言计算2^12保存在AX寄存器,并以十进制形式输出(
16
位
和
32
位
)
这篇博客介绍了如何使用汇编语言计算2的12次方并将结果保存在AX寄存器中,接着以十进制形式输出。通过
16
位
和
32
位
的示例代码展示,包括在DOSBOX环境下以及Win32和Win64汇编的实现。文章详细解释了计算和输出的原理,并提供了完整的汇编代码示例。
汇编语言
21,500
社区成员
41,617
社区内容
发帖
与我相关
我的任务
汇编语言
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
复制链接
扫一扫
分享
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章