tyu

来源:互联网 发布:英格拉姆数据 编辑:程序博客网 时间:2024/05/22 06:21

 ;***********************************************************
;helloworld
;Gerry
;***********************************************************
.model small
;***********************************************************
.stack
;***********************************************************
.code[codeseg]
;main programe
main proc far
org 07c00H ;make & = 07c00h

mov ax,07c0h
mov ds,ax
mov es,ax ; initialize all the segment to the same

;hello world
string db 'hello world'
len equ $-string
mov ah,3
mov bh,0
int 10H
mov bp,seg string
mov es,bp
mov bp,offset string
mov cx,len
mov bl,01H
mov dh,15
mov dl,0
mov al,1
mov ah,13H
int 10H
jmp $
exit: 
mov ax,4c00H
int 21H
main endp
;---------------------------------------------------------------
end main


然后我用UE打开了OBJ文件 复制了这个代码 拷到了bochs的启动软盘里面 把01f0h 最后改成了 55aa 但是启动虚拟机的时候不出helloworld 出的是
S =S =S
请问是怎么回事

这题答案很多。只要注意两个原则:

    1。源程序要写成编译后长度512字节,055AAH结尾的COM格式。
    2。源程序中不能使用DOS定义的INT 20H以后的中断。

能用masm5.0 编译通过的代码

CODES SEGMENT
ASSUME CS:CODES,DS:CODES,ES:CODES,SS:CODES
org 100h ;显示格式 2009-02-22 12:52:03
start:
jmp TT

disp:
push cx
mov ah,al
mov cx,4
shr al,cl
and al,0fh
or al,30h
stosb
mov al,0ch
stosb
mov al,ah
and al,0fh
or al,30h
stosb
mov al,0ch
stosb
pop cx
ret

Msg: db "Hello world!"
TT:push cs
pop ds
mov ax,3
int 10h
mov ax,0b800h
mov es,ax
cld
mov di,(80*8+26)*2
mov si,offset Msg
mov cx,13;显示Hello world!
shl cx,1
T0:movsb
mov al,0ch
stosb
loop T0
Again:
mov di,(80*10+30)*2
T1:mov ah,04 ;CX=2009 DX=0222
int 1ah;读取日期,CF=0 时钟在走,否则,时钟停止
;出口参数:CX=年,DX=月/日
mov al,ch;显示年
call disp
mov al,cl
call disp
mov al,'-'
stosb
mov al,0ch
stosb
mov al,dh;显示月
call disp
mov al,'-'
stosb
mov al,0ch
stosb
mov al,dl;显示日
call disp
mov al,20h
stosb
mov al,0ch
stosb

mov ah,02 ;CX=1252 DX=0300
int 1ah;读取当前时间,CF=0 时钟在走,否则,时钟停止
;出口参数:CX=时/分;DH=秒,DL=0 标准时间,否则,夏令时
mov al,ch;显示时
call disp
mov al,':'
stosb
mov al,0ch
stosb
mov al,cl;显示分
call disp
mov al,':'
stosb
mov al,0ch
stosb
mov al,dh;显示秒
call disp

mov ah,01
int 16h;读键盘
jz Again  ;无字符输入,继续显示时间
jmp $

Dat: db 339 dup(0) ; 填充剩下的空间
dw 0AA55H ; 结束标志
CODES ENDS
END START

以上代码编译为COM格式后,如BTIME.COM,再
用DEBUG.EXE导入内存,写到软盘即可。步骤:
debug btime.com
-w 0 0 1
-q

原创粉丝点击