4个回答
展开全部
; Program Name: Hello.ASM
Hello SEGMENT ; 以“Hello”命名段
ASSUME CS:Hello,DS:Hello ;代码段和数据段在同一个段空间
ORG 100H ;指令从100H开始
Start: ;程序运行起始位置
MOV AX,3 ; 设置视频显示方式为文本显示,80x25,16色
INT 10H ; 调用视频中断
LEA DX,Prompt_Str ; 装入字符串地址
MOV AH,9 ; 控制台输出字符串
INT 21H ; dos功能调用
MOV AX,4C00H ; 结束程序
INT 21H ; dos功能调用
Prompt_Str DB 'Hello World!$' ; 要显示的字符串一定要以符号$作为结束符号
Hello ENDS ;段结束
END Start ;源程序代码结束
Hello SEGMENT ; 以“Hello”命名段
ASSUME CS:Hello,DS:Hello ;代码段和数据段在同一个段空间
ORG 100H ;指令从100H开始
Start: ;程序运行起始位置
MOV AX,3 ; 设置视频显示方式为文本显示,80x25,16色
INT 10H ; 调用视频中断
LEA DX,Prompt_Str ; 装入字符串地址
MOV AH,9 ; 控制台输出字符串
INT 21H ; dos功能调用
MOV AX,4C00H ; 结束程序
INT 21H ; dos功能调用
Prompt_Str DB 'Hello World!$' ; 要显示的字符串一定要以符号$作为结束符号
Hello ENDS ;段结束
END Start ;源程序代码结束
展开全部
又有人问这个问题,说实话你去网上随便找个教程,开始一定是这个。如果你连这个程序都不懂,那么即使有注解你也不一定看得明白,那些“段”,“中断”的概念也有得你学的。
还是写个你看一下,用DOS下常用的编译器MASM5的程序:
.model small ;这里说明是个小程序
.stack 100h ;这里定义了堆栈大小
.data ;定义数据
msg db 'holle world!$' ;DOS下的字符串以"$"结尾
.code
start: ;代码开始处
mov ax,@data
mov ds,ax
mov dx,offset msg
mov ah,09h
int 21h
mov ah,4ch
int 21h
end start ;代码结束处
在汇编里start就相当C语言里的main()了,是程序入口。int **就是中断,在ah里放了中断号,中断就是一些系统程序,有一点像函数(比函数低级多了)。 其它注解和上面的差不多。这里用了省略法定义段。
还是写个你看一下,用DOS下常用的编译器MASM5的程序:
.model small ;这里说明是个小程序
.stack 100h ;这里定义了堆栈大小
.data ;定义数据
msg db 'holle world!$' ;DOS下的字符串以"$"结尾
.code
start: ;代码开始处
mov ax,@data
mov ds,ax
mov dx,offset msg
mov ah,09h
int 21h
mov ah,4ch
int 21h
end start ;代码结束处
在汇编里start就相当C语言里的main()了,是程序入口。int **就是中断,在ah里放了中断号,中断就是一些系统程序,有一点像函数(比函数低级多了)。 其它注解和上面的差不多。这里用了省略法定义段。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
汇编的编译器有masm tasm nasm。你是初学者就用masm吧 ide就不要用了 有是有 像masmplus radmasm都是不错的 但是初学的话也用不到。
下面的代码我编译过了 可以显示hello word!图我就不上了。
data segment
db 'HELLO WORD!'
data ends
assume ds:data,cs:code
code segment
start:mov ax,data
mov ds,ax //置段寄存器ds值
mov ax,0b800H
mov es,ax //置段寄存器es值
mov cx,11 //设置循环次数
xor bx,bx //清bx值
xor di,di //清di值
s1:
mov al,[di]
mov byte ptr es:[bx],al //将hello word!每一位送入显存
add bx,2 //送下一位
inc di
loop s1
mov ax,4c00h
int 21h //将dos控制交还给command
code ends
end start
用masm编译 命令是masm+文件名 编译出obj之后 link+文件名。
下面的代码我编译过了 可以显示hello word!图我就不上了。
data segment
db 'HELLO WORD!'
data ends
assume ds:data,cs:code
code segment
start:mov ax,data
mov ds,ax //置段寄存器ds值
mov ax,0b800H
mov es,ax //置段寄存器es值
mov cx,11 //设置循环次数
xor bx,bx //清bx值
xor di,di //清di值
s1:
mov al,[di]
mov byte ptr es:[bx],al //将hello word!每一位送入显存
add bx,2 //送下一位
inc di
loop s1
mov ax,4c00h
int 21h //将dos控制交还给command
code ends
end start
用masm编译 命令是masm+文件名 编译出obj之后 link+文件名。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
;堆栈段
;-----------------------------------------
stack segment stack
db 100(?)
stack ends
;数据段
;-----------------------------------------
data segment
szhello db 'hello,word',0dh,0ah,'$'
;-----------------------------------------
data ends
;-----------------------------------------
;代码段
;-----------------------------------------
code segment
assume cs:code,ds:data,ss:stack
start:
mov ax,data
mov ds,ax
mov ah,9
mov dx,offset szhello
int 21h
mov ah,4ch
int 21h
code ends
end start
这个就行了 编译一下就行了。解释就不打了应该看的明白吧。和下面的差不多。
;-----------------------------------------
stack segment stack
db 100(?)
stack ends
;数据段
;-----------------------------------------
data segment
szhello db 'hello,word',0dh,0ah,'$'
;-----------------------------------------
data ends
;-----------------------------------------
;代码段
;-----------------------------------------
code segment
assume cs:code,ds:data,ss:stack
start:
mov ax,data
mov ds,ax
mov ah,9
mov dx,offset szhello
int 21h
mov ah,4ch
int 21h
code ends
end start
这个就行了 编译一下就行了。解释就不打了应该看的明白吧。和下面的差不多。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询