8086汇编经典例程

合集下载

常用汇编语言8086程序集锦

常用汇编语言8086程序集锦

一、计算X+Y=Z,将结果Z存入某存储单元。

(1). 实验程序如下:STACK SEGMENT STACKDW 64 DUP(?)STACK ENDSDATA SEGMENTXL DW ? ;请在此处给X低位赋值XH DW ? ;请在此处给X高位赋值YL DW ? ;请在此处给Y低位赋值YH DW ? ;请在此处给Y高位赋值ZL DW ?ZH DW ?DATA E NDSCODE S EGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXMOV AX,XL ;X低位送AXADD AX,YL ;X低位加Y低位MOV ZL,AX ;存低位和MOV AX,XH ;X高位送AXADC AX,YH ;X高位加Y高位MOV ZH,AXA1: JMP A1CODE E NDSEND START二、计算X-Y=Z,其中X、Y、Z为BCD码。

实验程序及流程如下:STACK SEGMENT STACKDW 64 DUP(?)STACK ENDSDATA SEGMENTX DW ? ;请在此处给X赋值Y DW ? ;请在此处给Y赋值Z DW ?DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXMOV AH,00HSAHFMOV CX,0002HLEA SI, XLEA DI, ZA1: MOV AL,[SI]SBB AL,[SI+02H]DASPUSHFAND AL,0FHPOPFMOV [DI],ALINC DIINC SILOOP A1A2: JMP A2CODE ENDSEND START三、乘法运算本实验实现十进制数的乘法,被乘数、乘数和乘积均以BCD码形式存放在内存中,实验程序及流程如下:STACK SEGMENT STACKDW 64 DUP(?)STACK ENDSDATA SEGMENTDATA1 DB 5 DUP(?)DATA2 DB ?RESULT DB 6 DUP(?)DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV D S,AXCALL INITMOV S I,OFFSET DATA2MOV B L,[SI]AND B L,0FHCMP B L,09HJNC E RRORMOV S I,OFFSET DATA1MOV D I,OFFSET RESULTMOV C X,0005HA1: MOV A L,[SI+04H]AND A L,0FHCMP A L,09HJNC E RRORDEC S IMUL B LAAMADD A L,[DI+05H]AAAMOV [DI+05H],ALDEC D IMOV [DI+05H],AHLOOP A1MOV C X,06HMOV S I,OFFSET RESULTDISPLAY:MOV AH,01HMOV A L,[SI]ADD A L,30HMOV [SI],ALINC SILOOP DISPLAYA2: JMP A2INIT: MOV SI,OFFSET RESULTMOV C X,0003HMOV A X,0000HA3: MOV [SI],AXINC SIINC SILOOP A3RETERROR: MOV A X,0145HJMP A2CODE ENDSEND START。

(完整版)8086汇编经典例程,推荐文档

(完整版)8086汇编经典例程,推荐文档

sub bl,26 mov al,'a' add al,bl
MOV CX,00H WAIT1: LOOP WAIT1
;延时计数器 ;延时
DW 2 DUP (25*8,25*8,50*8) DW 12 DUP (25*8),100*8
jmp next40
DEC DX
next24: sub bl,52
==========================================
MAIN ENDP
MOV AX,[SI]
5. 编写一个数组排序(从小到大)的小程序,数组在程
序中定义,程序先将原数组显示一遍,然后排序,再
DISP PROC
将排好序的数组显示一遍。
PUSH SI
==========================================
MUS_TIME2 DW 3 DUP(50),25,25,50,25,25,100 DW 2 DUP(50,50,25,25),100 DW 3 DUP(50,25,25),100
crlf proc push ax push dx
音演奏歌曲 ========================================== ;这是一个音乐程序,按大写字母“A”,唱乐曲“玛丽
ccc segment assume cs:ccc,ds:qqq
main proc far start: mov ax,qqq
mov ds,ax
next3:
jmp next10 cmp al,'a' jnae next4 cmp al,'z' ja next4 sub al,'a'

四章节8086汇编语言程序设计

四章节8086汇编语言程序设计

一、汇编语言程序设计基本步骤 1. 分析问题,确定模型 2. 确定算法 3. 绘制流程图 4. 编写程序 5. 检查和调试
二、汇编语言程序的基本结构
1、顺序结构
举例
完成 x1*x2x3 x1:byte x2:word x3 34bit
2、分支结构
举例
实现
1 x 0
y
0
x0
1 x 0
用查表法确定分支 a、对8种产品进行编号0,1,……7 b、每一个编号对应一个入口地址 proc0,proc1,……proc7 步骤: a、把入口地址放在Table开始的内存单元; b、根据key内容进行查表实现分支转移
3、循环结构
举例
例1、计算y=0+2+4+……+1998 ydxax
4.2 8086汇编中的伪指令
一、 符号定义语句
1、等值语句 格式:符号名 EQU 表达式 例: ⑴ PORT EQU 1234 ⑵ BUFF EQU PORT+58 ⑶ MEM EQU DS:[BP+20H] ⑷ COUNT EQU CX ⑸ ABC EQU AAA
2、等号语句 格式: NUM=34 …… NUM=34+1
复制操作符DUP(Duplication)可预置重复的数值 例4: ALL_ZERO DB 0,0,0,0,0 用复制操作可改为:
ALL_ZERO DB 5 DUP(0)
5、将已定义的地址存入内存单元
例5: LIT DD CYC … CYC: MOV AX , BX
三、段定义语句
1、 段定义语句格式:
2)THIS操作符 格式: THIS 类型(或属性)
例:FIRST EQU THIS BYTE SECOND DW 100 DUP (?)

8086指令系统汇编实训实例

8086指令系统汇编实训实例

8086指令系统实训实例一、80x86微处理器中的寄存器图1-1 80x86微处理器的基本结构寄存器标志寄存器对照表序号类别123456789EFLAG OF DF IF TF SF ZF AF PF CF DEBUG=1 OV DN EI NG ZR AC PE CY DEBUG=0NVUPDIPLNZNAPONC标志名称 设置 未设置标志名称 设置 未设置溢出 OV(溢出) NV(未溢出) 零位 ZR (为0) NZ(不等于零)方向 UP(增加) DN (减少) 辅助进位 AC (有进位)NA(无进位)中断 EI(许可) DI(禁止) 奇偶标志 PE(偶) PO(奇)符号 NG(负) PL(正) 进位 CY (有进位) NC(清除进位)累加器AH AL BH BL CL DHDLCH SP SI DI IP FLAGS CS DS SS ESBP 基址寄存器 计数寄存器 数据寄存器 堆栈指针寄存器 基址指针寄存器 源变址寄存器 目的变址寄存器 指令指针寄存器 标志寄存器 代码段寄存器 段寄存器 附加段寄存器堆栈段寄存器 数据寄存器地址指针和 变址寄存器 控制寄存器 通用寄存器数据段寄存器二、用DEBUG软件学习汇编语言DEBUG的几点规则说明:1.所有数据默认为16进制数,后缀“H”不用加;2.DEBUG命令都是一个字母,字母大小写不分,后面的参数可以用空格分开,也可以不用;命令与数字之间可以不分开,但是两个十六进制数字之间必须分开,如:L100 = L 100;100 110 ≠100110 ;3.DEBUG中的地址表示格式有如下几种:1)段寄存器:偏移量,如:cs:1002)段地址:偏移量,如:04ba:100 或4ba:1003)默认段寄存器不写,只写偏移量,如:100;4)确定地址范围可以有两种表示方式:a)段地址:起始地址的偏移量结束地址的偏移量,如:cs:100 110;b)段地址:起始地址的偏移量L(长度),如:cs:100 L10;DEBUG软件基本指令用法一览表实例:查看主板BIOS信息:①输入“D FE00:0”,回车后看到的结果就是主板BIOS的厂商信息。

8086汇编实现的五子棋小游戏

8086汇编实现的五子棋小游戏

8086汇编实现的五⼦棋⼩游戏⼀、五⼦程序设计要求汇编实现五⼦棋游戏。

⾸先显⽰空⽩棋盘,让玩家选择旗⾊,⽩⼦先⾏。

进⼊游戏对弈循环只要有⼀⽅连成同⾊五⼦,即获胜。

事先写了⼀个普通的c++五⼦棋,然后将这个思路⽤汇编实现出来,代码逾500⾏,五⼦棋功能⽐较完善了,获胜逻辑什么的判断部分基本没有问题,花费了我很⼤的精⼒。

选择旗⾊,先⼿玩家即为⽩⾊,后⼿玩家为⿊⾊,分别以W,B代表⿊⽩棋⼦。

⼆、设计思路五⼦棋,⾸先需要显⽰棋盘,然后玩家输⼊落⼦坐标,⽩⽅落⼦,⿊⽅落⼦,落⼦循环,其中每次落⼦都要判断⼀次落⼦点是否已经有棋⼦了,那就需要提醒玩家重新输⼊落⼦坐标,同理玩家输⼊的坐标超出棋盘边界的时候也要提醒玩家。

落⼦的部分解决了,就得考虑获胜的判定逻辑了,每次成功的落⼦,就要对该坐标进⾏判定,我的判定获胜的⽅法是这样的,对于落⼦坐标进⾏四类判定,⼀种是横向的,⼀种是纵向的,另外两类是左上到右下,与左下到右上的,这样就涵盖了所有的获胜的情况,并且具体怎么实现?设定⼀个变量COUNT计算同⼀线上的同⾊棋⼦数⽬,COUNT初始为1。

从落⼦坐标出发,对于横向的,分两种搜索,⼀类向左搜索,遇到同类的棋⼦COUNT+1,⼀旦不是同⾊棋⼦或者是搜索到棋盘外便转到向右搜索的循环中去,每次COUNT+1后判断是否达到5,达到5了则当前落⼦⽅获胜,遇到⾮同⾊棋⼦或搜索到棋盘外跳出循环,重置COUNT为1后进⼊其它三类判定,其它三类的获胜判定与该法原理⼀致。

原理简单易懂,但是在汇编上实现起来还是遇到了不少问题的。

同时,每次有效落⼦的时候有个变量OVERFLOW需要+1,这个是计算和棋的变量,五⼦棋的棋盘是15*15⼤⼩的,当OVERFLOW达到225时还没有决出胜负,这时候便可以宣布和棋了。

⼀些实现上的问题,由于8086汇编的输⼊中断⼀次仅识别⼀个ASII字符,导致两位数的输⼊还得⼿撸,便设置了两个暂存量TI,TJ⽤于暂存输⼊,事后再赋值给真正的落⼦坐标I,J。

汇编语言程序设计实验篇(emu8086)

汇编语言程序设计实验篇(emu8086)

1.汇编语言程序设计实验篇1.1.汇编系统软件简介Emu8086-Microprocessor Emulator是集源代码编辑器、汇编/反汇编工具以及debug 的模拟器。

它能模拟一台"虚拟"的电脑运行程序,拥有独立的“硬件”,避免访问真实硬件。

该软件兼容Intel的下一代处理器,包括PentiumII、Pentium4。

利用该软件提供的调试工具,能够单步跟踪程序,观察程序执行过程中寄存器、标志位、堆栈和内存单元的内容。

1.1.1创建程序 TEMPLATE程序本章与指令相关的实验都是用COM TEMPLATE类型的程序完成的。

打开emu8086,在“welcome…”对话框中,单击按钮,创建文件。

在“choose code template”对话框中,选择“COM template-simple and tiny executable file format, pure machine code.”后,单击按钮。

在如所示的编辑界面中,在“;add your code here”部分输入相应的指令,第一条指令默认的偏移地址为100h。

输入全部指令后,单击按钮,保存相应的程序段。

2.EXE TEMPLATE程序本章与DOS功能调用和汇编源程序相关的实验都是用EXE TEMPLATE程序完成的。

打开emu8086,在“welcome…”对话框中,单击按钮,创建文件。

在“choose code template”对话框中,选择“EXE template-advanced executable file.header: relocation, checksum.”后,单击按钮。

在如图所示的编辑界面中,已经可以给出了源程序的框架,包含数据段、堆栈段和代码段的定义以及必要的功能调用等,在“add your data here”和“;add your code here”部分可以分别输入相应的变量定义和指令。

EL型(8086)上机参考程序

EL型(8086)上机参考程序

EL型(8086)上机参考程序一、顺序程序设计与调试1、AX←(AX)×10:①使用乘法指令:地址(16进制)机器码(16进制)汇编语言ASML1100 BB0A00 MOV BX, 10 ;1103 F7E3 MUL BX ;1105 F4 L: HLT ;1106 EBFD JMP L ;②移位加法1100 8BD8 MOV BX, AX ;1102 B102 MOV CL, 2 ;1104 D3E0 SAL AX, CL ;1106 03C3 ADD AX, BX ;1108 D1E0 SAL AX, 1 ;110A F4 L1: HLT ;110B EBFD JMP L1 ;;;或者1100 8BD8 MOV BX, AX ;1102 D1E3 SAL BX, 1 ;1104 B103 MOV CL, 3 ;1106 D3E0 SAL AX, CL ;1108 03C3 ADD AX, BX ;110A F4 L2: HLT ;110B EBFD JMP L2 ;2、y=6x4+5x3+2x2+7x+8①输入:x=0~10,x存放在1200H~1201H,输出:y,存放在1202H~1204H(压缩BCD码)注:低地址中存放数值的低字节。

②算法:y=(((6x+5)x+2)x+7)x+8③参考程序地址(16进制)机器码(16进制)汇编语言ASM1100 BE0600 MOV SI, 6 ;1103 8B3E0002 MOV DI, [0200H];1107 8BC7 MOV AX, DI ;1109 F7E6 MUL SI ;110B 050500 ADD AX, 5 ;110E F7E7 MUL DI ;1110 050200 ADD AX, 2 ;1113 F7E7 MUL DI ;1115 050700 ADD AX, 7 ;1118 F7E7 MUL DI ;111A 050800 ADD AX, 8 ;111D B104 MOV CL, 4 ;111F 33D2 XOR DX, DX ;1121 BB0A00 MOV BX, 10 ;1124 F7F3 DIV BX ;1126 89160202 MOV [0202H], DX;112A 33D2 XOR DX, DX ;112C F7F3 DIV BX ;112E D3E2 SAL DX, CL ;1130 08160202 OR [0202H], DL;1134 33D2 XOR DX, DX ;1136 F7F3 DIV BX ;1138 89160302 MOV [0203H], DX;113C 33D2 XOR DX, DX ;113E F7F3 DIV BX ;1140 D3E2 SAL DX, CL ;1142 08160302 OR [0203H], DL;1146 89060402 MOV [0204H], AX;114A F4 L3: HLT ;114B EBFD JMP L3 ;二、分支程序设计与调试1、求最大公约数①输入:在1200H~1201H中存有0800H(2048D)[或者(0024H=36D)],在1202H~1203H中存有0400H(1024D)[或者(001BH=27D)] 输出:在1204H~1205H中存放最大公约数。

第4章 8086汇编语言程序设计(实例)_6h

第4章 8086汇编语言程序设计(实例)_6h
32
4.7 DOS功能调用与子程序设计
子程序/系统功能调用包括入口参数,出口参数 功能号和中断调用指令。
入口参数:传递的数据(有些不需要) 出口参数:返回的数据(有些子程序没有) 功能号: 子程序编号(必须送入AH寄存器) 中断调用:中断调用(INT 21H)
33
4.7 DOS功能调用与子程序设计
……
3
DATA SEGMENT
ARRAY DW 100 DUP(?)
DATA STK
ENDS SEGMENT
PARA
等效于:LEA BX, ARRAY STA区C这K别两‘在S条T于A语C:K句’O不F可FS少ET,是否伪则指,令D,S而
DB 10 DUP(?) STK ENDS
L未EA初是始指化令。性指令,执行阶段不同
;低于,则为大写字母
;高于,则不是字母 ;将小写字母改为大写
MOV [BX] , AL
NEXT: INC BX
JMP A1
EXIT: ……
10
四、表格处理问题
简单加密问题:编程将0~9的数字明码转换为密 码,密码表(明码和密码的映射关系)如下:
0123456789 2716908345
比如,数字1587,加密后成为7043 对此类问题,无法通过确定的函数关系来描述,
;存放结果(密码)
ENDS
……
程序需要做什么样的修改呢?
DATA TAB VA1 VA2 DATA
SEGMENT
DW 2, 7, 1, 6 ,9, 0, 8, 3, 4, 5 ;密码表
DB 8, 4, 1, 7, 5
;被加密码(明码)
DB 5 DUP(?)
;存放结果(密码)
ENDS
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

==========================================5.编写一个数组排序(从小到大)的小程序,数组在程序中定义,程序先将原数组显示一遍,然后排序,再将排好序的数组显示一遍。

==========================================AAA SEGMENTBUF DB '45$'L = $ - BUFary dw -897,345,6789,8654,-1234,-3456,-99,-678,987,567,32762,-12121,0,3434,4645,-234,23455,-100,100,1000,-1000dw 572,-2345,-6543,-1234,9999|len dw ($-ary)/2ASSUME CS:AAA, DS:AAAMAIN PROC FARPUSH CSPOP DSLEA SI,ARYMOV CX,LENNEXT3: MOV BX,[SI]CALL DISPCALL SPACE-ADD SI,2LOOP NEXT3CALL CRLFCALL CRLFLEA SI,ARYMOV CX,LENCALL SORTLEA SI,ARYMOV CX,LENNEXT5: MOV BX,[SI]CALL DISP…CALL SPACEADD SI,2LOOP NEXT5MOV AH,4CHINT 21HMAIN ENDPDISP PROCPUSH SIPUSH AXPUSH BX!PUSH DXPUSH CXMOV CX,0CMP BX,0JNL NEXT1NEG BXMOV CX,1NEXT1: LEA SI,BUF+l-1MOV AX,BXMOV BX,10NEXT: MOV DX,0}DIV BXADD DL,30HDEC SIMOV [SI],DLCMP AX,0JNE NEXTCMP CX,0JE NEXT2DEC SIMOV BYTE PTR [SI],'-'NEXT2: MOV DX,SI!MOV AH,9INT 21HPOP CXPOP DXPOP BXPOP AXPOP SIRETDISP ENDPSORT PROC(NEXTT: PUSH CXMOV DI,SIMOV AX,[SI]NEXT0: CMP AX,[DI]JL NEXTQMOV BX,AXMOV AX,[DI]MOV [DI],BXNEXTQ: ADD DI,2LOOP NEXT0MOV [SI],AX…ADD SI,2POP CXLOOP NEXTTRETSORT ENDPCRLF PROCPUSH AXPUSH DXMOV DL,13MOV AH,2|INT 21H MOV DL,10 INT 21H POP DXPOP AXRET CRLF ENDPSPACE PROCPUSH AXPUSH DX】MOV DL,' 'MOV AH,2INT 21HPOP DXPOP AXRETSPACE ENDPAAA ENDSEND MAIN===============================================6.!7.编写一个程序,从键盘输入10个十进制数字字符,然后将这些数字加密存储在缓冲区BUFFER中。

加解密表如下:==========================================qqq segmentTAB1 DB 'QWERTYUIOPASDFGHJKLZXCVBNM'TAB2 DB 'qazwsxedcrfvtgbyhnujmikolp'TAB3 DB ')(*&^%/#@!'LEN = $-tab1MSS1 DB 13,10,'Please chose afunctioc:',0DH,0AHDB ' 1--jiami ',0DH,0AHDB ' 2---jiemi ',13,10…DB ' 0--exit$'MSS2 DB 0dh,0ah,'Error! You have press " "key!$'MM1 DB 'Your input is:'BUF1 DB 255 DUP()MM2 DB 'My output is:'BUF2 DB 255 DUP()qqq endsccc segmentassume cs:ccc,ds:qqqmain proc far;start: mov ax,qqqmov ds,axrep1: call crlfLEA SI,BUF1LEA DI,BUF2lea dx,mss1 ;显示菜单mov ah,9int 21hmov ah,1 ;输入你的选项int 21h#cmp al,'0' ;输入0,结束je quitcmp al,'1' ;输入1,加密je jiamicmp al,'2' ;输入2,解密je jiemimov [mss2+25],al ;其他字符,错误,重输入lea dx,mss2mov ah,9int 21hjmp rep1#quit: mov ah,4chint 21hjiami: call crlfnext1: mov ah,1int 21hcmp al,27je NEXT14MOV [SI],ALcmp al,'A'jnae next3]cmp al,'Z'ja next3sub al,'A'lea bx,tab1jmp next10next3: cmp al,'a'jnae next4cmp al,'z'ja next4sub al,'a'lea bx,tab2·jmp next10next4: cmp al,'0'jb next13cmp al,'9'ja next13lea bx,tab3sub al,'0'next10: xlatnext13: MOV [DI],ALINC SIINC DI:jmp next1next14: MOV BYTE PTR [SI],24H MOV BYTE PTR [DI],24HCALL CRLFLEA DX,MM1MOV AH,9INT 21HCALL CRLFLEA DX,MM2INT 21HJMP REP1~jiemi: call crlf next18: mov ah,1int 21hcmp al,27je NEXT14MOV [SI],ALmov bx,0next20: cmp al,tab1[bx]je next22inc bx、cmp bx,62jb next20jmp next40next22: cmp bx,26jae next23mov al,'A'add al,bljmp next40next23: cmp bx,52jae next24sub bl,26—mov al,'a'add al,bljmp next40next24: sub bl,52mov al,'0'add al,blnext40: MOV [DI],ALINC SIINC DIjmp next18main endp]crlf procpush axpush dxmov ah,2mov dl,13int 21hmov dl,10int 21hpop dxpop ax。

retcrlf endpccc endsend start==========================================8.编写一个发声的小程序,通过程序使PC喇叭发出声音==========================================PROG SEGMENTMAIN PROC FARASSUME CS:PROG,DS:PROG…START: MOV DX,0000 ;计产生"1","0"次数IN AL,61H ;取得设备控制字AND AL,0FCH ;使AL最低两位为"0"CHANG: XOR AL,3 ;改变输出值OUT 61H,AL;输出到61H端口,扬声器发声MOV CX,00H ;延时计数器WAIT1: LOOP WAIT1 ;延时DEC DXJNE CHANGMOV AH,4CH-INT 21H ;返回系统PROG ENDSEND START==========================================9.编写一个唱歌的小程序,通过程序使PC喇叭发出声音演奏歌曲==========================================;这是一个音乐程序,按大写字母“A”,唱乐曲“玛丽有只小羔羊”;;按大写字母“B”,唱乐曲“太湖船”;按大写字母“C”,唱乐曲“祝福歌”;按"Q"鍵,退出—DATA SEGMENT PARA 'DATA'INFO1 DB 0DH,0AH,'WELCOME TO COME HERE!$'INFO2 DB 0DH,0AH,'this is a music program!$' INFO3 DB 0DH,0AH,'please select!$'INFO4 DB 0DH,0AH,'INPUT ERROR!$'INFO5 DB 0DH,0AH,'PLEASE INPUT AGAIN!$'MUSLIST DB 0DH,0AH,'A MUSIC1'DB 0DH,0AH,'B MUSIC2'DB 0DH,0AH,'C MUSIC3'?DB 0DH,0AH,'Q EXIT'DB 0DH,0AH,'$'MUS_FREG1 DW 330,294,262,294,3 DUP (330)DW 3 DUP (294),330,392,392DW 330,294,262,294,4 DUP (330) DW 294,294,330,294,262,-1 MUS_TIME1 DW 6 DUP (25*8),50*8DW 2 DUP (25*8,25*8,50*8)DW 12 DUP (25*8),100*8—MUS_FREG2 DW 330,392,330,294,330,392,330,294,330DW 330,392,330,294,262,294,330,392,294DW 262,262,220,196,196,220,262,294,332,262,-1MUS_TIME2 DW 3 DUP(50),25,25,50,25,25,100DW 2 DUP(50,50,25,25),100DW 3 DUP(50,25,25),100:MUS_FREG3 DW 262,262,294,262,349DW 330,262,262,294,262DW 392,349,262,262,523DW 440,349,262,262,466DW 466,440,262,392,349,-1MUS_TIME3 DW 50,50,100,100,100DW 100,100,50,50,100,100DW 100,100,100,50,50,100DW 100,100,100,100,100,50DW 50,100,100,100,100,100{DATA ENDSSTACK SEGMENT PARA STACK 'STACK'DB 200 DUP ('STACK')STACK ENDS;*****定义一个宏*****SHOW MACRO bLEA DX,bMOV AH,9、INT 21HENDM;**********************CODE SEGMENTASSUME DS:DATA, SS:STACK, CS:CODEMAIN PROC FARMOV AX,DATAMOV DS,AXMOV AH, 0 ;0号功能MOV AL,4 ;显示方式号4放在-;AL中320*200四色图形INT 10H ;显示器输出控制中断调用MOV AH,0BH ;置彩色调色板MOV BH,0MOV BL,1 ;BH=0,BL=4,背景色为红色INT 10H ;显示器输出控制中断调用MOV AH,0BHMOV BH,01HMOV BL,00INT 10H ;显示器输出控制中断调用show INFO1;show INFO2show INFO3show MUSLISTINPUT: MOV AH,01HINT 21HCMP AL,'Q'JZ retuCMP AL,'A'JNZ B0LEA SI,MUS_FREG1LEA BP,DS:MUS_TIME1~CALL MUSICJMP EXIT1B0: CMP AL,'B'JNZ C0LEA SI,MUS_FREG2LEA BP,DS:MUS_TIME2 CALL MUSICJMP EXIT1C0: CMP AL,'C'JNZ exitLEA SI,MUS_FREG2…LEA BP,DS:MUS_TIME2 CALL MUSICEXIT1: show INFO5JMP INPUTEXIT: call clearshow INFO4show INFO5show INFO1show INFO2show INFO3show MUSLIST%jmp inputRETU: MOV AH,4CHINT 21HMAIN ENDPMUSIC PROC NEARFREG1: MOV DI,[SI]CMP DI,-1JE END_MUS1MOV DX,DS:[BP]MOV BX,1400*CALL GENSOUNDADD SI,2ADD BP,2JMP FREG1END_MUS1: RETMUSIC ENDPGENSOUND PROC NEARPUSH AXPUSH BXPUSH CX|PUSH DXPUSH DIMOV AL,0B6HOUT 43H,ALMOV DX,12HMOV AX,533H*896DIV DIOUT 42H,ALMOV AL,AHOUT 42H,ALIN AL,61H}MOV AH,ALOR AL,3OUT 61H,ALWAIT1: MOV CX,8FF0HDELAY1: LOOP DELAY1DEC BXJNZ WAIT1MOV AL,AHOUT 61H,ALPOP DIPOP DX:POP CXPOP BXPOP AXRETGENSOUND ENDPclear proc nearpush axpush bxpush cxpush dx$mov ah,6mov al,0mov ch,0mov cl,0mov dh,24mov dl,79mov bh,7int 10hpop dxpop cxpop bx{pop axretclear endpCODE ENDSEND MAIN==========================================10.编写一个通过键盘输入你的名字,然后在屏幕上显示,“hello, 你的名字!”的程序。

相关文档
最新文档