汇编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