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;
------解决方案--------------------------------------------------------