求一个VC6.0下的HELLO WORLD,回答好了加100分,不够还可以另发帖再加分

cxdzxc 2009-03-11 11:40:35
要求C代码,非C++,程序需要运行在DOS下,先在实模式下显示一行 HELLO WORLD_16,然后通过内嵌汇编(不用汇编

最好),或者纯C(如果这样可以的话)的方式进入32位保护模式,显示一行 HELLO WORLD_32,然后返回到DOS,显示

一行RETURN DOS
...全文
710 29 打赏 收藏 转发到动态 举报
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
光宇广贞 2009-05-11
  • 打赏
  • 举报
回复
怎么进实模式?
renzhestudio 2009-05-10
  • 打赏
  • 举报
回复
学习!高手真多!
xtdumpling 2009-04-02
  • 打赏
  • 举报
回复
回26#:
CPU模式 操作系统
实模式 不等于 DOS
保护模式 不等于 Windows

LZ的意思是程序里进行模式切换,如14#
zpxfzp 2009-04-01
  • 打赏
  • 举报
回复
[Quote=引用楼主 cxdzxc 的帖子:]
要求C代码,非C++,程序需要运行在DOS下,先在实模式下显示一行 HELLO WORLD_16,然后通过内嵌汇编(不用汇编

最好),或者纯C(如果这样可以的话)的方式进入32位保护模式,显示一行 HELLO WORLD_32,然后返回到DOS,显示

一行RETURN DOS
[/Quote]

实模式+保护模式? 你要在程序中切换Dos6.22和Windows吗?干嘛用?
cxdzxc 2009-03-20
  • 打赏
  • 举报
回复


郑重声明,这个图是VMWARE虚拟机的截图(虽然还不能算是真正的纯DOS,但已经模拟得很好了,在纯DOS里运行的效果与在VMWARE里运行的效果没有什摸不同),并非是XP里的,运行在RING3级的V86的那个虚拟DOS,怎摸总是有一些人认为我的DOS是运行在RING3级的V86呢,很明显都是没好好看我写的汇编代码就在那自以为是了,狂汗中!!!另对保护模式还不了解的可以先到这里看看http://biosos.5d6d.com/thread-12-1-1.html
autumn1225 2009-03-20
  • 打赏
  • 举报
回复
驱动的管理,可以使用SCM管理器,不过,我也不会.

理论上,可以在RING3,切换到RING0,当然切出是比较简单.修改CR0值,再加JMP.


cxdzxc 2009-03-19
  • 打赏
  • 举报
回复
9楼---mnzn2530---的楼号怎摸没有了,害我不能把分加给他,CSDN最近问题多多啊
vamking_boy 2009-03-16
  • 打赏
  • 举报
回复
up,学学
beijingbeerman 2009-03-16
  • 打赏
  • 举报
回复
make一下
Gsky33 2009-03-16
  • 打赏
  • 举报
回复
有时间我来试试
cxdzxc 2009-03-16
  • 打赏
  • 举报
回复
我把汇编的代码帖到14楼了,请懂C的高手帮我转成C语言形式的,或者C内嵌汇编形式的,感激不尽了!!!---如果测试能成功运行立即加100分,或者另开帖再加分都可以的!!!
wxgiter 2009-03-16
  • 打赏
  • 举报
回复
UP~~~~
Guilty 2009-03-15
  • 打赏
  • 举报
回复
我那时用的NASM,16位32位可以混着来。
Guilty 2009-03-15
  • 打赏
  • 举报
回复
我以前做过一个,汇编写的引导扇区,转入32位模式后载入一个PE格式的WIN32程序,重定位并且找到入口执行,只是不支持WIN32 API,提供一个字符模式显示的API。不大,10天写了不到一千行程序,多数时间是学习看资料。
目的是摆脱WINDOWS和硬盘执行我用VC6编译的图象识别程序,实现了。
cxdzxc 2009-03-15
  • 打赏
  • 举报
回复
LGDT qword ptr cs:GDTR ;masm5.0在这里要用qword,因为MASM5.0有这个BUG,其它MASM6.XX要用fword
cxdzxc 2009-03-15
  • 打赏
  • 举报
回复


.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:67286087;QQ:750347821;EMAIL:750347821@QQ.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
dididu1515 2009-03-15
  • 打赏
  • 举报
回复
这题,我不会。编程傻瓜--汇编 V1.0b
http://www.dai-ma.com/code/pg/huibian/14443763097.html
这程序就是从DOS模式启动,转到Windows的,大家可参考一下。
czc1009 2009-03-15
  • 打赏
  • 举报
回复
看晕了!基础太差了!
学习了!
nwao7890 2009-03-13
  • 打赏
  • 举报
回复
我晕,这么难的题,MARK!
cxdzxc 2009-03-12
  • 打赏
  • 举报
回复
非常感谢楼上的两位,我再看看有没有更好的回答,另希望各位高手能加入到我的群67286087里来,将不胜荣幸
加载更多回复(9)

21,458

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧