求汇编语言的"hello world"

另外解释的越清楚越好,最好是每行都能注释下什么作用。
2024-12-21 11:58:52
推荐回答(5个)
回答1:

;这个是8086的写法
data segment ;这里定义一个数据段
tab db 'hello world$' ;这里用内存存放字节数据 'hellow world!',$用来判断字符串是否输出完毕
data ends ;数据段的结束标志
code segment ;这里定义了一个代码段
assume cs:code, ds:data ;这里把程序中定义的段与对应的段寄存器关联起来
start: ;这里是一个标号,根据end后面的标号判断这里是程序的开始位置
mov ax,data
mov ds,ax ;这里把数据段的地址放到数据段寄存器ds中
lea dx,tab ;dx中放将要显示数据的偏移地址
mov ah,9h
int 21h ;调用21号中断的9号功能来显示字符串
mov ah,4ch
int 21h ;程序返回
code ends ;代码段的结束语
end start ;定义程序从哪个标号处开始执行

;==========================================================
;这里的是win32的汇编写的

.386 ;这里定义了使用的指令集是80386的
.model flat,stdcall ;定义内存模式和调用的方式(堆栈平衡)
option casemap:none ;定义对大小写是否敏感

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;Include 文件定义
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

include windows.inc
include user32.inc
includelib user32.lib
include kernel32.inc
includelib kernel32.lib ;这里引用了一些头文件来说明将要用到的api函数

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;数据段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.data
szCaption db 'A MessageBox !',0
szText db 'Hello World !',0 ;定义数据段,上面的是标题,这里的是显示的内容
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;代码段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.code
start:
invoke MessageBox,NULL,offset szText,offset szCaption,MB_OK
;调用messageBox函数来显示字符串
invoke ExitProcess,NULL
;调用函数来结束这个程序的进程

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
end start ;定义程序从哪里开始运行

回答2:

网页链接  这是我自己写的总结笔记,适合新生入门,望被采纳~

回答3:

补充一下

DATAS  SEGMENT

     STRING  DB  13,10,'Hello World!',13,10,'$'

DATAS  ENDS


CODES  SEGMENT

     ASSUME    CS:CODES,DS:DATAS

START:

     MOV  AX,DATAS

     MOV  DS,AX

     LEA  DX,STRING

     MOV  AH,9

     INT  21H

   

     MOV  AH,4CH

     INT  21H

CODES  ENDS

    END   START

回答4:

.386
.model flat,stdcall
option casemap:none

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;Include 文件定义
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

include windows.inc
include user32.inc
includelib user32.lib
include kernel32.inc
includelib kernel32.lib

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;数据段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.data
szCaption db 'A MessageBox !',0
szText db 'Hello World !',0
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;代码段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.code
start:
invoke MessageBox,NULL,offset szText,offset szCaption,MB_OK
invoke ExitProcess,NULL
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
end start

回答5:

data segment
tab db 'hello world$'
data ends
code segment
assume cs:code, ds:data
start:
mov ax,data
mov ds,ax
lea dx,tab
mov ah,9h
int 21h
mov ah,4ch
int 21h
code ends
end start