当前位置: 代码迷 >> 汇编语言 >> 新手,刚刚学汇编
  详细解决方案

新手,刚刚学汇编

热度:2716   发布时间:2013-02-26 00:00:00.0
新手求助,刚刚学汇编。
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;

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