主题:大家来帮帮看看这段hello world代码。
Troy0523
[专家分:10] 发布于 2006-09-20 09:41:00
print macro
push ax
mov ax,0900h
int 21h
pop ax
endm
data segment
mess1 db 20 dup('-')
mess2 db 'Hello world~~!$'
data ends
stack segment 'stack'
dw 100 dup(?)
stack ends
code segment
main proc far
assume cs:code,ds:data,es:data,ss:stack
start:
mov ax,data
mov ds,ax
mov es,ax
mov dx,offset mess1
print
lea dx,mess2
print
ret
main endp
code ends
end start
;怎么输出得不到我想要的效果呢?
;输出什么都没有。我气死
回复列表 (共6个回复)
沙发
lheng [专家分:1490] 发布于 2006-09-20 19:15:00
提个很简单的建议,将你的字符串用双引号括起来试试!
板凳
Troy0523 [专家分:10] 发布于 2006-09-20 21:40:00
还是不行
3 楼
chenzep [专家分:3640] 发布于 2006-09-21 09:08:00
初始化SS:SP,最后的RET改为MOV AX,4C00H INT 21H
如果在不行,修改你的DOS中断~换过一个来实现,反正我一般是用BOIS中断来输出的.
4 楼
Troy0523 [专家分:10] 发布于 2006-09-21 10:45:00
还是不行
5 楼
liangbch [专家分:1270] 发布于 2006-09-21 13:11:00
1. 将start标号改在 main函数内部,不能通过编译,将代码修改如下后,能够正确运下:
print macro
push ax
mov ax,0900h
int 21h
pop ax
endm
data segment
mess1 db 20 dup('-')
mess2 db 'Hello world~~!$'
data ends
stack segment 'stack'
dw 100 dup(?)
stack ends
code segment
assume cs:code,ds:data,es:data,ss:stack
start:
mov ax,data
mov ds,ax
mov es,ax
mov dx,offset mess1
print
lea dx,mess2
print
mov ax,4c00h
int 21h
code ends
end start
2.我使用的汇编程序为 ml为6.15,链接程序为tc2.0自带的tlink,命令行和执行结果如下:
E:\lbc\mycode\testcode\PRF405~1>ml /c test.asm
Microsoft (R) Macro Assembler Version 6.15.8803
Copyright (C) Microsoft Corp 1981-2000. All rights reserved.
Assembling: test.asm
E:\lbc\mycode\testcode\PRF405~1>tlink test
Turbo Link Version 2.0 Copyright (c) 1987, 1988 Borland International
Warning: no stack
E:\lbc\mycode\testcode\PRF405~1>test
--------------------Hello world~~!Hello world~~!
6 楼
Troy0523 [专家分:10] 发布于 2006-09-21 16:14:00
成功了,OK 谢谢拉。。
我来回复