字符串动画显示汇编语言程序设计
- 格式:doc
- 大小:226.00 KB
- 文档页数:26
8086汇编语⾔程序设计——第⼀个程序本系列以80X86系列微型计算机为基础,以MASM5.0为汇编上机实验环境,重点介绍Intel8086指令系统。
Intel8086指令系统中有100多条指令,利⽤这些指令可以编写出复杂的程序实现更多功能。
汇编语⾔是直接控制计算机硬件⼯作的最简便的语⾔。
学习了汇编语⾔可具有在CPU寄存器级上进⾏控制和操作的能⼒,可获得直接对计算机硬件底层编程的经验。
⼀个计算的例⼦例 *编写⼀个汇编语⾔程序,实现下列公式计算。
假设X=4,Y=5汇编指令如下:如果在DEBUG下⽤A命令输⼊这些指令,必须把X、Y换成具体的数值;Z、Z1是存储单元地址,最后两条指令可写为MOV [0],AL和MOV [1],AH,这样才能⽤T命令执⾏。
D:\dos〉DEBUG-AMOV AL,4ADD AL,5MOV BL,8IMUL BLMOV BL,4MOV BH,0SUB AX,BXMOV BL,2IDIV BLMOV [0],ALMOV [1],AH采⽤DEBUG的A命令输⼊程序的做法明显不⽅便,⼀是⽆法给出变量名即符号地址,⼆是调试修改程序不便。
1. 编写⼀个完整的汇编语⾔源程序需要增加段定义伪指令和定义数据存储单元伪指令等必须有的伪指令。
伪指令与C语⾔等⾼级语⾔中的说明性语句的含义类似,起到说明作⽤。
⽤记事本gedit或者vi编写,保存到dos⽬录下注释符号为;号2. 汇编、链接、执⾏汇编语⾔源程序既可以⽤⼤写字母也可以⽤⼩写字母书写。
汇编语⾔程序建⽴及汇编过程如图所⽰。
⽤户编写的源程序要经汇编程序MASM汇编(翻译)后⽣成⼆进制⽬标程序,⽂件名默认与源程序同名、扩展名为.OBJ;再经过LINK连接⽣成可执⾏程序,⽂件名默认与源程序同名、扩展名为.EXE。
注意:源程序⼀定要和MASM和LINK⽂件放在同⼀个⽂件夹中。
执⾏MASM和LINK命令时需要按多次回车。
3. 在DEBUG下执⾏程序MOV AH,4C指令对应的偏移地址是0023,这就是断点(所谓断点,就是程序执⾏到该处停下来不再继续)。
钱晓捷新版汇编语言程序设计习题答案第一章汇编语言基础知识1.17、举例说明CF和OF标志的差异。
溢出标志OF和进位标志CF是两个意义不同的标志进位标志表示无符号数运算结果是否超出范围,运算结果仍然正确;溢出标志表示有符号数运算结果是否超出范围,运算结果已经不正确•例1:3AH + 7CH=B6H无符号数运算:58+124=182,范围内,无进位有符号数运算: 58+124=182 ,范围外,有溢出•例2:AAH + 7CH=(1)26H无符号数运算:170+124=294,范围外,有进位有符号数运算:-86+124=28 ,范围内,无溢出1.20、8086有哪4种逻辑段,各种逻辑段分别是什么用途?(解答)代码段(Code Segment)用来存放程序的指令序列。
处理器利用CS : IP取得下一条要执行的指令•堆栈段(Stack Segment)确定堆栈所在的主存区域。
处理器利用SS : SP操作堆栈中的数据•数据段(Data Segment)存放当前运行程序所用的数据。
处理器利用DS : EA存取数据段中的数据•附加段(Extra Segment)是附加的数据段,也用于数据的保存。
处理器利用ES : EA存取数据段中的数据第二章8086指令系统2.1已知DS = 2000H、BX = 0100H、SI = 0002H,存储单元[20100H] ~ [20103H]依次存放12 34 56 78H,[21200H] ~ [21203H]依次存放2A 4C B7 65H,说明下列每条指令执行完后AX寄存器的内容。
(1) mov ax,1200h ;AX=1200h(2) mov ax,bx ; AX=0100h(3) mov ax,[1200h] ; AX=4C2Ah(4) mov ax,[bx] ; AX=3412h(5) mov ax,[bx+1100h] ; AX=4C2Ah(6) mov ax,[bx+si] ; AX=7856h(7) mov ax,[bx][si+1100h] ; AX=65B7h2.2指出下列指令的错误(1) mov cx,dl 两操作数类型不匹配(2) mov ip,ax IP 指令指针禁止用户访问(3) mov es,1234h 立即数不允许传给段寄存器(4) mov es,ds 段寄存器之间不允许传送(5) mov al,300 两操作数类型不匹配(6) mov [sp],ax 目的操作数应为[ BP ](7) mov ax,bx+di 源操作数应为 [BX+DI](8) mov 20h,ah 立即数不能作目的操作数2.3已知数字0 ~ 9对应的格雷码依次为:18H、34H、05H、06H、09H、0AH、0CH、11H、12H、14H,它存在于以table为首地址(设为200H)的连续区域中。
20个简单汇编语言程序汇编语言是一种底层编程语言,其语法简洁、速度快,被广泛应用于嵌入式系统和设备驱动程序的开发。
本文将介绍20个简单的汇编语言程序,帮助读者了解该语言的基本语法和用法,以便更好地进行编程。
1. 程序1:将两个数相加并显示结果。
这个程序演示了如何使用汇编语言进行简单的算术操作。
2. 程序2:计算并显示斐波那契数列。
这个程序展示了如何使用循环和条件语句来求解数学问题。
3. 程序3:判断一个数是否是素数。
这个程序演示了如何使用分支语句来进行逻辑判断。
4. 程序4:将一个字符串逆序输出。
这个程序展示了如何使用栈来实现字符串逆序。
5. 程序5:计算一个字符串的长度。
这个程序展示了如何使用循环和计数器来确定字符串的长度。
6. 程序6:将一个字符串转换为大写。
这个程序演示了如何使用位运算来进行字符转换。
7. 程序7:计算一个数的阶乘。
这个程序展示了如何使用循环和累加运算来求解阶乘。
8. 程序8:判断一个字符串是否是回文。
这个程序演示了如何使用循环和栈来进行字符串回文判断。
9. 程序9:实现快速排序算法。
这个程序展示了如何使用递归和分区操作来进行快速排序。
10. 程序10:实现冒泡排序算法。
这个程序演示了如何使用循环和比较操作来进行冒泡排序。
11. 程序11:计算一个数组的平均值。
这个程序展示了如何使用循环和累加运算来求解平均值。
12. 程序12:查找一个数组中的最大值。
这个程序演示了如何使用循环和比较操作来进行最大值查找。
13. 程序13:判断一个数是否是回文。
这个程序展示了如何使用循环和取余操作来进行数字回文判断。
14. 程序14:实现字符串拼接操作。
这个程序演示了如何使用循环和指针操作来进行字符串拼接。
15. 程序15:实现矩阵乘法运算。
这个程序展示了如何使用循环和累加运算来进行矩阵乘法。
16. 程序16:计算一个数的平方根。
这个程序演示了如何使用二分法和近似计算来求解平方根。
17. 程序17:实现字符串匹配操作。
(此文档为word格式,下载后您可任意编辑修改!)华北电力大学实验报告||实验名称汇编语言程序设计课程实验课程名称汇编语言程序设计||专业班级:网络1002 学生姓名:学号:成绩:指导教师:王保义实验日期:2013.1实验1 用表格形式显示字符1、实验目的及要求(1)实验目的学习用汇编语言设计与编写循环程序。
(2)实验要求按15行×16列的表格形式显示ASCII码为10H---100H的所有字符,即以行为主的顺序及 ASCII码递增的次序一次显示对应的字符。
每16个字符为一行,每行中的相邻两个字符之间用空白符(ASCII为0)隔开。
2、所用仪器、设备Masm for windows集成实验环境3、实验原理利用dos的02号显示输出功能调用,显示字符4、实验方法与步骤(1)编程思路:把dl初始化为10H,然后不断使其加一以取得下一个字符的ASCII码,直到dl 为100为止。
换行时用cx计数。
显示空白符时,用其ASCII码0置入dl寄存器,每行结束时,用显示回车和换行来结束本行并开始下一行。
由于逐个显示相继的字符时,需要保存并修改寄存器内容,而显示空格,回车,换行时,也要使用寄存器,用堆栈保存相继的字符。
(2)流程图5、分析与结论用表格形式显示字符这个程序做起来比较简单,用语句:mov bl,15,mov cx, 16来定义15行*16列的表格,loop lie语句循环输出每行的16个字符,先比较每一行的字符是否输出16个,如果是,则转到exit用mov ax,4c00h ,int 21h输出此行的字符,同时,行计数器随之增1,当行计数器增至15,证明字符表已经输完,完全显示出来,程序结束。
由于这个实验比较易于实现,先画出程序框图,之后就比较好编写,编程简单也比较快,所以没有遇到什么问题,最后的输出结果也是正确的。
实验二查找匹配字符串一、实验目的及要求(1)实验目的学习用汇编语言设计与编写循环程序。
汇编语⾔程序设计习题-答案4.1 分析执⾏下列指令序列后的结果:1)MOV AX,1234HMOV BX,00FFHAND AX,BX【答】(AX)=0034H2)MOV AL,01010101BAND AL,00011111B ;(AL)=00010101BOR AL,11000000B ;(AL)=11010101BXOR AL,00001111B ;(AL)=11011010BNOT AL【答】(AL)=00100101B3)MOV DL,05HMOV AX,0A00HMOV DS,AXMOV SI,0HMOV CX,0FHAGAIN: INC SICMP [SI],DLLOOPNE A GAINHLT本程序实现了什么功能?【答】在以0A001H开始的15个单元中查找05H。
4)MOV AX,DSEGADDRMOV DS, AXMOV ES,AXMOV SI, OFFSET B1ADDRMOV DI,OFFSET B2ADDRMOV CX,NCLDREP MOVSBHLT本程序实现了什么功能?MOV DS,AXMOV ES, AXMOV AL,05HMOV DI,0A000HMOV CX,0FHCLDAGAIN: SCASBLOOPNE AGAINHLT本程序实现了什么功能?【答】从地址0A000H开始的15个单元中查找字节型数据05H,⽤条件循环LOOPNZ,控制数据05H的查找。
4.2 阅读程序:1). CLDLEA DI,[0100H]MOV CX, 0080HXOR AX, AXREP STOSW本程序实现了什么功能?【答】将DS中起始地址为0100H的128个字节单元清零。
2). MOV AL, 08HSAL AL,01H ;(AL)=00010000HMOV BL, ALMOV CL ,02HSAL AL,CL ;(AL)=01000000HADD AL,BL ;(AL)=01010000H本程序实现了什么功能?【答】将AL中的内容乘以10。
附录:《IBM—PC汇编语言程序设计》习题参考答案第一章.习题1.1用降幂法和除法将下列十进制数转换为二进制数和十六进制数:(1) 369 (2) 10000 (3) 4095 (4) 32767答:(1) 369=1 0111 0001B=171H(2) 10000=10 0111 0001 0000B=2710H(3) 4095=1111 1111 1111B=FFFH(4) 32767=111 1111 1111 1111B=7FFFH1.2将下列二进制数转换为十六进制数和十进制数:(1) 10 1101 (2) 1000 0000 (3) 1111 1111 1111 1111 (4) 1111 1111答:(1) 10 1101B=2DH=45(2) 1000 0000B=80H=128(3) 1111 1111 1111 1111B=FFFFH=65535(4) 1111 1111B=FFH=2551.3将下列十六进制数转换为二进制数和十进制数:(1) FA (2) 5B (3) FFFE (4) 1234答:(1) FAH=1111 1010B=250(2) 5BH=101 1011B=91(3) FFFEH=1111 1111 1111 1110B=65534(4) 1234H=1 0010 0011 0100B=46601.4完成下列十六进制数的运算,并转换为十进制数进行校核:(1) 3A+B7 (2) 1234+AF (3) ABCD-FE (4) 7AB×6F答:(1) 3A+B7H=F1H=241(2) 1234+AFH=12E3H=4835(3) ABCD-FEH=AACFH=43727(4) 7AB×6FH=35325H=2178931.5下列各数均为十进制数,请用8位二进制补码计算下列各题,并用十六进制数表示其运算结果。
(1) (-85)+76 (2) 85+(-76) (3) 85-76 (4) 85-(-76) (5) (-85)-76 (6) -85-(-76)答:(1) (-85)+76=1010 1011B+0100 1100B=1111 0111B=0F7H;CF=0;OF=0(2) 85+(-76)=0101 0101B+1011 0100B=0000 1001B=09H;CF=1;OF=0(3) 85-76=0101 0101B-0100 1100B=0101 0101B+1011 0100B=0000 1001B=09H;CF=0;OF=0(4) 85-(-76)=0101 0101B-1011 0100B=0101 0101B+0100 1100B=10100001B=0A1H;CF=0;OF=1(5) (-85)-76=1010 1011B-0100 1100B=1010 1011B+1011 0100B=0101 1111B=5FH;CF=0;OF=1(6) -85-(-76)=1010 1011B-1011 0100B=1010 1011B+0100 1100B=11110111B=0F7H;CF=0;OF=0 1.6下列各数为十六进制表示的8位二进制数,请说明当它们分别被看作是用补码表示的带符号数或无符号数时,它们所表示的十进制数是什么?(1) D8 (2) FF答:(1) D8H表示的带符号数为-40,D8H表示的无符号数为216;(2) FFH表示的带符号数为-1,FFH表示的无符号数为255。
知识点第一章基础知识(1)正负数的补码表示, 掌握计算机中数和字符的表示;eg.假设机器字长为8位,[+3]补=00000011B,[-3]补= 11111101 H 。
十六进制数0FFF8H表示的十进制正数为65528D,表示的十进制负数为-8D。
8位二进制数被看成是带符号补码整数时,其最小值是-128,最大值是 127 。
第二章80x86计算机组织(1)中央处理机CPU的组成和80x86寄存器组,重点:专用寄存器,段寄存器eg: IP寄存器中保存的是?代码段中的偏移地址FLAGS标志寄存器中共有几位条件状态位6位,有几位控制状态位2位,标志寄存器分为哪2类?陷阱标志,中断标志。
(2)存储单元的地址和内容每一个字节单元给以一个唯一的存储器地址,称为物理地址;一个存储单元中存放的信息称为该存储单元的内容。
存储器地址的分段,(低位字节存放)低地址,(高位字节存放)高地址;实模式下逻辑地址、选择器和偏移地址;物理地址的表示段基地址加上偏移地址。
eg.如果SS=6000H,说明堆栈段起始物理地址是_____60000H___。
已知字节(00018H)=14H,字节(00017H)=20H,则字(00017H)为__1420H______。
如果(SI)=0088H,(DS)=5570H,对于物理地址为55788H的内存字单元,其内容为0235H,对于物理地址为5578AH的内存字单元,其内容为0E60H,那么执行指令LDS SI,[SI]以后,(SI)= 0235H ,(DS)= 0E60H .第三章80x86的指令系统和寻址方式与数据有关的寻址方式(立即寻址方式,寄存器寻址方式,直接寻址方式,寄存器间接寻址方式,寄存器相对寻址方式,基址变址寻址方式,相对基址变址寻址方式)和与转移地址有关的寻址方式(段内直接寻址,段内间接寻址,段间直接寻址,段间间接寻址)。
数据传送指令(通用数据传送指令、累加器专用传送指令、输入输出指令)、算术指令(加法指令、减法指令(*加减指令对4个标志位的影响[of,cf,sf,zf])、乘法指令(*乘法指令的要求:目的操作数必须是累加器)、除法指令(*被除数在累加器中,除法指令执行完以后,商和余数在?))、逻辑指令(逻辑运算指令(*XOR,AND,OR,TEST指令及指令执行后对标志位的影响)、移位指令)、串处理指令(与REP相配合工作的MOVS、STOS、LODS 指令,与REPE/REPZ和REPNE/REPNZ联合工作的CMPS、SCAS指令)、控制转移指令(无条件转移指令、条件转移指令、循环指令、子程序调用指令、中断)。
目 录 1总体方案论证 .............................................................................................................................. 1 1.1题目功能分析 .................................................................................................................... 1 1.2算法说明 ............................................................................................................................ 1 2流程图设计及说明 ...................................................................................................................... 2 2.1主程序流程图设计 ............................................................................................................ 2 2.2分布具体功能实现流程图设计 ........................................................................................ 3 2.2.1字符串右移 .............................................................................................................. 3 2.2.2字符串下移 .............................................................................................................. 4 2.2.3字符串闪烁 .............................................................................................................. 5 3软件设计关键问题或程序段落说明 .......................................................................................... 5 3.1提示输入字符串显示功能实现 ........................................................................................ 5 3.2向右、向下移动功能实现 ................................................................................................ 7 3.3字符串大小写变化实现 .................................................................................................... 9 3.4颜色变化功能实现 .......................................................................................................... 10 3.5退出功能实现 .................................................................................................................. 10 4调试说明、结果记录及分析 .................................................................................................... 11 4.1调试说明 .......................................................................................................................... 11 4.2结果记录与分析 .............................................................................................................. 11 4.2.1 提示输入字符串 ................................................................................................... 11 4.2.2输入后显示字符串 ................................................................................................ 12 4.2.3在特定位置从无到有显示 .................................................................................... 12 4.2.4在特定位置向右移动 ............................................................................................ 13 4.2.5在特定位置向下移动 ............................................................................................ 13 4.2.6小写变成大写加闪烁 ............................................................................................ 14 5课程设计收获及心得 ................................................................................................................ 15 6参考文献 .................................................................................................................................... 16 字符串动画显示汇编语言程序设计 1总体方案论证 1.1题目功能分析 (1)屏幕提示输入字符串; (2)输入完成后,字符动画显示,显示方式可为:从无到有,从左到右,从上到下,大小写变化、颜色变化等; (3)可连续显示或定时显示,直至单击“Q”或“q”键退出程序。
1.2算法说明
(1)屏幕提示输入字符串主要运用中断INT 21H的0A H功能; (2)在确定光标位置后,通过循环改变其行列数值来达到左右上下移动功能; 大小写变化则通过将输入字符与‘a’和‘z’比较,若为小写字母,则减去20H,否 则不变; 颜色变化则通过INT 10H的09H功能循环调用实现; (3)退出功能通过将输入‘Q’和‘q’与其ASC比较,跳转到退出程序;而退出程序主 要通过INT 21H的4C H功能实现。 2流程图设计及说明 2.1主程序流程图设计
图2-1 字符串动画总流程图 字符串右移 结束
开始 段地址初始化 进入Dos窗口 输出提示信息 输入字符串 显示输入字符串
Y N 字符串向下移动 字符串小写变大写 三色变换闪烁
按Q,q?
图2-1 主程序流程图 2.2分布具体功能实现流程图设计 2.2.1字符串右移
结束 输完? 获取字符串
Y Y N
图2-2 字符串右移流程图
开始 输出字符串 设置光标起始位置
延迟1 输出空白覆盖字符串 延迟2
结束? N
横坐标更新 2.2.2字符串下移 结束 输完? 获取字符串
Y Y N
图2-3 字符串下移流程图
开始 输出字符串 设置光标起始位置
延迟1 输出空白覆盖字符串 延迟2
结束? N
纵坐标更新 2.2.3字符串闪烁
3软件设计关键问题或程序段落说明 3.1提示输入字符串显示功能实现 屏幕提示输入字符串主要运用中断INT 21H的0A H功能,输入后回车则完成字符串在特定位置的显示。另外,在此段程序中,还通过用空字符串的逐个显示来完成字符从无到有的功能实现。
lea dx,buf mov ah,0ah
结束 Y 图2-4 字符串闪烁流程图
N
获取字符串 开始 N 是否输完? Y
输出字符串 设置起始位置
延迟1
设置字符串颜色
次数已到?