什么是汇编语言程序

什么是汇编语言程序,第1张

使用汇编语言编写的程序,机器不能直接识别,要由一种程序将汇编语言翻饥答段译成机器语言,这种起烂誉翻译作用的程序叫汇编程序,汇编程序是系统软件中语言处理系统软件。汇编语言编举誉译器把汇编程序翻译成机器语言的过程称为汇编。

HELLO,WORLD进阶汇编程序系列

Editor:admin Time:2004-3-21 12:49 Read:9785 Score:8 Print

Writer:LLUCT

Excerpt:80x86汇编小站

Preface:

感谢网友lluct为本站提供原创......适合初学者学习哦

Content:

TITLE ***HELLO,WORLD进阶程序之选择分支 BY LLUCT***

DATASEGMENT 定义数据段

MSG1DB '***WELCOME TO MY PROGRAM BY LLUCT***','$'

定义输出的第一个字符串信息,字符串必须用DB定义,$为结束标志磨模

MSG2DB '1:BASIC MESSAGE 2:ADVANCED MESSAGE','$'

定义输出的字符串信息:选择菜单

MSG3DB 'PLEASE CHOOSE:','$'

定义输出的字符串信息:选择前缀

MSG4DB 'HELLO,WORLD!^-^','$'

定义输出的字符串信息:分支1的信息

MSG5DB 'THIS IS MY FIRST ASM_86 PROGRAM! @^-^@','$'

定义输出的字符串信息:分支2的信息

ERRMSG DB 'CHOOSE ERROR! -_-b','$'

定义输出的字符串信息:选择错误信息

DATAENDS 数据段结尾

CODESEGMENT 定义代码段

ASSUME CS:CODE 规定CS的内容

ASSUME DS:DATA 规定DS的内容

START: MOV AX,DATA 程序从START开始

MOV DS,AX DS置初值,DATA的段地址

CALL ENTER 调用显示回车换行子程序

LEA DX,MSG1 输出第一个字符串的偏移地址

CALL DISPCHS 调用显示字符串子程序

CALLENTER 调用显示回车扮游谈换行子程序

CALLENTER 这个...同上啊^-^

LEA DX,MSG2 输出第二个字符串的偏移地址

CALL DISPCHS 调用显示字符串子程序

AGAIN: CALLENTER 定义AGAIN标号.用于选择错误循环

LEA DX,MSG3 输出第三个字符串的偏移地址

CALL DISPCHS 调用显示字符串子程序

MOV AH,01H 调用1号功能:从键盘输入一个字符并回显

INT 21H 完成输入回显

CMP AL,'1' 输入的字符和1相比较

JE BASICP 如果相等,转移到BASICP标号(JE=Jump if Equal)

CMP AL,'2' 输入的字符和2相比较 ||

JE ADVANP 如果厅碰相等,转移到ADVANP标号(JE=如果相等就转移)

JMP ERROR 否则就无条件转移到ERROR标号

EXIT: MOV AH,4CH 4C号功能调用:终止当前程序并返回调用程序

INT 21H 返回DOS

BASICP: CALLENTER 什么,还要解释啊.晕-_-!!!

LEA DX,MSG4 输出第三个字符串的偏移地址

CALL DISPCHS 调用显示字符串子程序

CALLENTER ..........

JMP EXIT 无条件转移到EXIT标号

ADVANP: CALLENTER 55555555

LEA DX,MSG5 解释了四次,应该懂了吧

CALL DISPCHS 调用显示字符串子程序

CALLENTER 再问就死给你看

JMP EXIT 无条件转移到EXIT标号

ERROR: CALLENTER

LEA DX,ERRMSG 输出选择错误信息

CALL DISPCHS 调用显示字符串子程序

MOV DL,07H 输出ASCII码的报警(响铃)控制符BEL(07H)

CALL DISPCH 调用显示单个字符子程序

CALLENTER

JMP AGAIN

DISPCH PROCNEAR

显示单个字符子程序,NEAR说明子程序和主程序在同一个代码段中(现无主程序调用)

MOV AH,02H 2号功能调用:显示器输出字符

INT 21H 完成输出显示

RET 返回

DISPCH ENDP 子程序结尾

ENTER PROCNEAR 显示回车换行子程序

MOV DL,0DH 输出ASCII码的回车控制符CR(0DH)

CALLDISPCH 调用显示单个字符子程序

MOV DL,0AH 输出ASCII码的换行控制符LF(0AH)

CALLDISPCH 调用显示单个字符子程序

RET 返回

ENTER ENDP 子程序结尾

DISPCHS PROC NEAR

显示字符串子程序,NEAR说明子程序和主程序在同一个代码段中(现无主程序调用)

MOV AH,09H 9号功能调用:显示字符串

INT 21H 完成输出显示

RET

DISPCHS ENDP

CODEENDS 代码段结尾

END START 结束汇编

把以上代码复制到记事本等文本程序中,并保存.(如helloch.asm)

编译:masm helloch.asm

连接:link helloch.obj

执行:helloch.exe

======================================================

title ***hello,world进阶之字符串输入输出 by lluct***

datasegment 定义数据段

input db 100 dup(?)

定义输入的字符串,字符串必须用db定义,长度为100个字节

msg1db 'Hello,','$'

定义输出的前缀字符串信息,字符串必须用db定义,$为结束标志(24h)

msg2db ',Welcome to here!','$'

定义输出的后缀字符串信息

headmsg db 'PLEASE INPUT YOUR NAME:','$'

开始显示的字符串信息

dataends 数据段结尾

codesegment 定义代码段

assume cs:code 规定cs的内容

assume ds:data 规定ds的内容

start: mov ax,data 程序从start开始

mov ds,ax ds置初值,data的段地址

mov si,0 变址寄存器置初值0

callenter 调用显示回车换行子程序

lea dx,headmsg 输出开始显示的字符串的偏移地址

calldispchs 调用显示字符串子程序

repeat: mov ah,01h

定义repeat标号,用于循环输入单个字符.调用1号功能:从键盘输入一个字符并回显

int 21h 完成输入回显

cmp al,0dh 输入的字符和CR(回车)比较

je exit 如果等于回车就转移到exit

mov input[si],al 把al的值传送到input的si地址中(好像是这样吧)

inc si si加1

jmp repeat 无条件转移到repeat

exit: callenter

mov input[si],24h 给输入完成的字符串加上结束标志($)

callenter

lea dx,msg1 输出前缀字符串的偏移地址

calldispchs 调用显示字符串子程序

lea dx,input 输出刚才输入的字符串

calldispchs

lea dx,msg2

calldispchs

callenter

mov ah,4ch 4c号功能调用:终止当前程序并返回调用程序

int 21h 返回dos

enter procnear 显示回车换行子程序

mov dl,0dh 输出ascii码的回车控制符cr(0dh)

calldispch

mov dl,0ah 输出ascii码的换行控制符lf(0ah)

calldispch

ret 返回

enter endp 子程序结束

dispch procnear

mov ah,02h 2号功能调用:显示器输出字符

int 21h 完成输出显示

ret 返回

dispch endp

dispchs procnear

mov ah,09h 9号功能调用:显示字符串

int 21h 完成输出显示

ret 返回

dispchs endp

codeends 代码段结尾

end start 结束汇编

把以上代码复制到记事本等文本程序中,并保存.(如heinout.c)

编译:masm heinout.asm

连接:link heinout.obj

执行:heinout.exe

这个是16位汇编或者说是dos汇编,你先手碰搞清楚这个程序不需要看 win32 汇编

如毕伏谈果要看书,最好看dos下面汇编图书,masm的手厅贺册中也行。

.model 表示采用的程序模型,比如small中,数据段和程序段是在同一个段内;

.stack 200H表示堆栈(stack)的长度是100h

.data 表示下面是数据段

.code表示代码段开始

db 是在定义数据

请参考 http://zhidao.baidu.com/link?url=S-9rhIwHmTCg4apRJFUv9UYM16yyeD_LXKgSZV6Wl6GJuC5WT9G3-VjwS505dDm9RzGSy_SRC-9zheYPDXbEt_


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12442748.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存