汇编dos窗口下的Hello world还是有点难度,非调用win32 api方式,折腾了半天,总算弄出来了.

 

方法一: 调用中断 

    HELLO.ASM:



assume cs:codesg,ds:datas

; str字符必须是13位,所以中间加了两个空格,网上很多代码也避开了这个问题,都是通过加空格,拼写错误,反正加个占位符
; 否则会输出一堆乱码,实在想不明白是什么原因
datas segment
str db 'Hello World!','$'
datas ends

codesg segment
mov ax,datas
mov ds,ax
lea dx,str ; 获取str的偏移地址
mov ah,9 ; 调用9号功能输出字符串
int 21h

mov ah,4ch
int 21h
codesg ends
end



 

方法二: 直接向显卡写字符串

    TEST.ASM:



assume cs:codesg,ds:datas

datas segment
db 'Hello World!'
datas ends

codesg segment
start:
mov ax,datas
mov ds,ax ;ds:si 指向字符串
mov si,0

mov bx,0b800h
mov es,bx
mov di,0 ;es:di 指向显卡缓冲区
mov cx,12

;循环12次,向显卡缓冲区内写入字符串
s0:
mov ah,1010b
mov al,[si]
mov es:[di],ax ;向屏幕逐个写入字符串
inc si ;移动至下一个字符串
add di,2
loop s0

mov ax,4c00h
int 21h

codesg ends
end start
;注:必须先清空屏幕,才能在dos开头处显示Hello world字符



   运行结果:

  

 

方法三: 直接用debug命令编写exe,这个太牛了

    ​​http://jakwings.is-programmer.com/posts/27619.html​