读书人

新手刚刚学汇编

发布时间: 2012-03-30 17:32:09 作者: rapoo

新手求助,刚刚学汇编。
c语言HELLO WORLD!程序大家都知道,即:
#include <stdio.h>
int main(void)
{
printf("HELLO WORLD!");
return 0;
}

初学写了个汇编的,下面是代码:

下面是运行结果:


问题是:1.为什么HELLO WORLD!前会有一串乱码,并且有个no stack segment 的警告?
2.编译--链接要回车好多次,显得很繁杂,有没有一步到位的方法?
3.MOV DX,AX能改成MOV DS,AX吗?
貌似C语言隐藏了很多东西,比如中断调用。
我知道这些个问题很小白,但是我反复运行程序,却越搞越乱。希望哪位热心给个解答,诚谢!

[解决办法]
第二条指令写错了吧,应该是 mov ds, ax 而不是 mov dx, ax
[解决办法]
mov ds,ax 你写成了 mov dx,ax

Assembly code
data segment        buf db 'hello world! %$#@'data endscode segment    assume cs:code,ds:datastart:        mov ax,data        mov ds,ax     ;这一行你写成了 mov dx,ax    lea dx,buf    mov ah,09    int 21h    mov ah,4ch    int 21h        code endsend start
[解决办法]
1.为什么还有个no stack segment 的警告?
去掉这个警告的方法:
assume ds:data,cs:code,ss:stack
...
定义一个栈段,假如红字
stack segment stack
dw xxx dup (0)
stack ends

2.编译--链接要回车好多次,显得很繁杂,有没有一步到位的方法?
有,加上分号,即可。
masm ur.asm;
link ur.obj;
[解决办法]
探讨

编译--链接要回车好多次,显得很繁杂,有没有一步到位的方法?
有,加上分号,即可。
masm ur.asm;
link ur.obj;

我下面是按你说的运行程序的过程,可以不再多次回车,但是貌似无法得到结果。

读书人网 >汇编语言

热点推荐