汇编语言程序例题知识讲解
钱晓捷新版汇编语言程序设计习题答案(修改)详解

钱晓捷新版汇编语言程序设计习题答案第一章汇编语言基础知识1.1、简述计算机系统的硬件组成及各部分作用1.2、明确下列概念或符号:主存和辅存,RAM和ROM,存储器地址和I/O端口,KB、MB、GB和TB1.3、什么是汇编语言源程序、汇编程序、目标程序?1.4、汇编语言与高级语言相比有什么优缺点?1.5、将下列十六进制数转换为二进制和十进制表示(1)FFH (2)0H (3)5EH (4)EFH(5)2EH (6)10H (7)1FH (8)ABH1.6、将下列十进制数转换为BCD码表示(1)12 (2)24 (3)68 (4)127(5)128 (6)255 (7)1234 (8)24581.7、将下列BCD码转换为十进制数(1)10010001 (2)10001001 (3)00110110 (4)10010000(5)00001000 (6)10010111 (7)10000001 (8)000000101.8、将下列十进制数分别用8位二进制数的原码、反码和补码表示(1)0 (2)-127 (3)127 (4)-57(5)126 (6)-126 (7)-128 (8)681.9、完成下列二进制数的运算(1)1011+1001 (2)1011-1001 (3)1011×1001 (4)10111000÷1001(5)1011 ∧~1011 (8)1011 ⊕1001 1001(6)1011 ∨1001(7)1.10 数码0~9、大写字母A~Z、小写字母a~z对应的ASCII码分别是多少?ASCII码为0dh、0ah对应的是什么字符?1.11、计算机中有一个“01100001”编码,如果把它认为是无符号数,它是10进制什么数?如果认为它是BCD码,则表示什么数?又如果它是某个ASCII码,则代表哪个字符?1.12、简述Intel 80x86系列微处理器在指令集方面的发展。
1.13、什么是DOS和ROM-BIOS?1.14、简述PC机最低1MB主存空间的使用情况。
汇编语言程序例题0001

【例】试编写一程序计算以下表达式的值。
w = (v- (x * y + z -540 )) /x式中x、y、z、v均为有符号字数据。
设x、y、z、v的值存放在字变量X、Y、Z、V中,结果存放在双字变量W之中,程序的流程图如图所示。
DATA SEGMENTX DW 200Y DW 100Z DW 3000V DW 10000W DW 2 DUP (?)DATA ENDSSTACK SEGMENT STACKDB 200 DUP (0)STACK ENDSCODESEGMENTASSUME DS DATA CS: CODE SS: STACKSTART MOV AX DATAMOV DS AX ; DATA>AXMOV AX XIMUL Y ; (X) * (DX AXMOV CX AXMOV BX,DX ;(DX AX)TBX:CX)MOV AX,ZCWD ;(Z)符号扩展ADD CX,AXADC BX,DX;(BX: CX)+( DX:AX)BX:CX)SUB CX,540SBB BX,0 ;( BX:CX) - 5 40~BX:CX)MOV AX,VCWD ;(V)符号扩展SUB AX,CXSBB DX,BX ;( DX:AX)-((BX CX DX: AX)IDIV X ;( DX:AX)/XMOV W,AX ;商5MOV W+2 DX ;余数D©W+2MOV AH,4CHINT 21HCODEENDS ;退出DOS 状态END START【例】已知某班学生的英语成绩按学号(从 1 开始)从小到大的顺序排列在要查的学生的学号放在变量NO中,查表结果放在变量ENGLISH中。
编写程序如下: STACK SEGMENT STACKDB 200 DUP(0)STACK ENDSDATA SEGMENTTAB DB 80 ,85,86,71,79,96DB 83 ,56,32,66,78,84NO DB 10ENGLIST DB ?DATA ENDSCODE SEGMENTASSUME DS: DATA,SS: STACK,CS: CODEBEGIN: MOV AX,DATAMOV DS,AXLEA BX,TABMOV AL,NODEL ALXLAT TABMOV ENGLIS,H ALMOV AH,4CHINT 21HCODEENDSTAB表中,END BEGIN【例】已知在内存中有一个字节单元NUM存有带符号数据,要求计算出它的绝对值后, 放入RESULT^元中。
汇编语言程序例题知识讲解

第一遍101690328
第二遍169032108
第三遍903216108
程序流程图如图5.9所示。
DATASEGMENT
BUFDW 3,-4,6,7,9,2,0,-8,-9,-10,20
N=($-BUF)/2
DATAENDS
STACKSEGNMENT STACK
DB 200 DUP(0)
DI存放ASCII码首地址
出口参数:
转换后的字符串存放在以DI作指针的字节存贮区中
程序清单:
DATASEGMENT
NUM8DB93H
NUM16DW0ABCDH
ASCBUFDB20DUP(0)
DATAENDS
CODESEGMENT
ASSUME DS:DATA,CS:CODE,SS:STACK
START:MOVAX,DATA
题目分析:根据数学中绝对值的概念知道,一个正数的绝对值是它本身,而一个负数的绝对值是它的相反数;要计算一个数的相反数,需要完成减法运算,即用0减去这个数。8086/8088指令系统中有专门的求相反数的指令NEG。
DATASEGMENT
XDB -25
RESULTDB ?
DATAENDS
CODESEGMENT
程序流程如图下所示。
DATASEGMENT
TABDW P1,P2,P3,P4,P5,P6,P7,P8
NDB 5
DATAENDS
STACKSEGMENT
DB 200 DUP(0)
STACKENDS
CODESEGMENT
ASSUME DS:DATA,SS:STACK,CS:CODE
START:MOVAX,DATA
MOVDS,AX
《汇编语言程序设计》(第四版)教案及答案解析

《汇编语言程序设计》教案附:习题参考答案《汇编语言程序设计》(第4版)钱晓捷主编前言1.汇编语言是计算机能提供给用户的最快而又最有效的语言,也是能够利用计算机所有硬件特性并能直接控制硬件的唯一语言。
2.汇编语言程序设计是高等院校电子计算机硬、软件及应用专业学生必修的核心课程之一。
它不仅是计算机原理、操作系统等其它核心课程的必要先修课,而且对于训练学生掌握程序设计技术、熟悉上机操作和程序调试技术都有重要作用。
3.本教材共有十一章,其内容安排如下:(1).第一、二章为汇编语言所用的基础知识。
(2).第三章详细介绍80x86系列CPU的指令系统和寻址方式。
(3).第四章介绍伪操作、汇编语言程序格式及汇编语言的上机过程。
(4).第五、六章说明循环、分支、子程序结构和程序设计的基本方法。
(5).第七章说明宏汇编、重复汇编及条件汇编的设计方法。
(6).第八章叙述输入/输出程序设计方法,重点说明中断原理、中断过程及中断程序设计方式。
(7).第九章说明BIOS和DOS系统功能调用的使用方法。
(8).第十~十一章分别说明图形显示、发声及磁盘文件存储的程序设计方法,同时提供各种程序设计方法和程序实例。
附:教学参考书1.沈美明、温冬婵编著,IBM–PC汇编语言程序设计(第2版),清华大学出版社,2001年(教材)2.沈美明、温冬婵编著,IBM–PC汇编语言程序设计,清华大学出版社,1991年3.沈美明、温冬婵编著,IBM–PC汇编语言程序设计—例题习题集,清华大学出版社,1991年6月4.沈美明、温冬婵、张赤红编著,IBM–PC汇编语言程序设计—实验教程,清华大学出版社,1992年5.周明德,微型计算机IBM PC/XT(0520系列)系统原理及应用(修订版),清华大学出版社,19916.郑学坚、周斌,微型计算机原理及应用(第二版),清华大学出版社,19957.王士元、吴芝芳,IBM PC/XT[长城0520] 接口技术及其应用,南开大学出版社,19908.杨素行,微型计算机系统原理及应用,清华大学出版社,19959.戴梅萼、史嘉权,微型计算机技术及应用—从16位到32位(第二版),清华大学出版社,199610.张昆藏,IBM PC/XT微型计算机接口技术,清华大学出版社,199111.孟绍光,李维星,高档微机组成原理及接口技术(80386/80486/Pentium),学苑出版社,199312.吴秀清,周荷琴,微型计算机原理与接口技术,中国科学技术大学出版社目录第 1 章基础知识 (1)1.1进位计数制与不同基数的数之间的转换 (1)1.2二进制数和十六进制数的运算 (2)1.3计算机中数和字符的表示 (3)1.4几种基本的逻辑运算 (3)第 2 章 80X86计算机组织 (4)2.180X86微处理器 (4)2.2基于微处理器的计算机系统构成 (4)2.3中央处理机 (5)2.4存储器 (6)2.5外部设备 (7)第 3 章 80X86的指令系统和寻址方式 (8)3.180X86的寻址方式 (8)3.2程序占有的空间和执行时间 (10)3.380X86的指令系统 (10)第 4 章汇编语言程序格式 (27)4.1汇编程序功能 (27)4.2伪操作 (27)4.3汇编语言程序格式 (31)4.4汇编语言程序的上机过程 (34)第 5 章循环与分支程序设计 (37)5.1循环程序设计 (37)5.2分支程序设计 (38)5.3如何在实模式下发挥80386及其后继机型的优势 (38)第 6 章子程序结构 (40)6.1子程序的设计方法 (40)6.2子程序的嵌套 (41)6.3子程序举例 (41)第 7 章高级汇编语言技术 (43)7.1宏汇编 (43)7.2重复汇编 (44)7.3条件汇编 (45)第 8 章输入/输出程序设计 (46)8.1I/O设备的数据传送方式 (46)8.2程序直接控制I/O方式 (47)8.3中断传送方式 (47)第 9 章 BIOS和DOS中断 (50)9.1键盘I/O (50)9.2显示器I/O (52)9.3打印机I/O (53)9.4串行通信口I/O (54)第 10 章图形与发声系统的程序设计 (55)10.1显示方式 (55)10.2视频显示存储器 (55)10.3EGA/VGA图形程序设计 (56)10.4通用发声程序 (57)10.5乐曲程序 (58)第 11 章磁盘文件存取技术 (59)11.1磁盘的记录方式 (59)11.2文件代号式磁盘存取 (60)11.3字符设备的文件代号式I/O (61)11.4BIOS磁盘存取功能 (62)附录:《IBM—PC汇编语言程序设计》习题参考答案 (63)第一章.习题 (63)第二章.习题 (64)第三章.习题 (65)第四章.习题 (79)第五章.习题 (84)第六章.习题 (104)第七章.习题 (118)第八章.习题 (125)第九章.习题 (130)第十章.习题 (134)第十一章.习题 (145)第 1 章 基础知识【教学目的】本章内容是本课程的基础,通过本章学习,使学生明确汇编语言程序设计的学科性质、基本内容和学习意义,掌握数制的转换、数据的编码,了解本门课程的教学要求和学习方法。
第4章-汇编语言程序设计习题解答

LOP: LODSB XCHG AL,[DI] XCHG SI,DI DEC DI STOSB XCHG SI,DI INC DI LOOP LOP
习题4.14
• 现有一子程序: SUB1: PROC TEST AL,80H(1000 0000B);AL的值与80H相“与”,判断正负 JE PLUS ;如果AL的首位为0(即为正),则转移到PLUS ;如果AL为负,则顺序执行 TEST BL,80H ; 判断BL的值的正负 JNE EXITO ;如果BL的首位为1(为负),则转移到EXITO ;如果BL为正,则顺序执行 JMP XCHANGE;转移到XCHANGE PLUS: TEST BL,80H ;判断BL的值的正负 JE EXITO ;如果BL的首位为0(即为正),则转移到EXITO ;如果BL为负,时顺序执行 XCHANGE: XCHG AL,BL ;AL与BL交换 EXITO: RET ;返回主程序 SUB1 ENDP 试回答(1)子程序的功能是什么? (2)如调用前AL=9AH,BL=77H,那么返回主程序时AL=?;BL=? 解答:(1)子程序的功能是判别AL和BL中的数是否为异号数,当为异号时交换,否则不 变。 (2) AL中的数据的最高位为1,BL中的数据的最高位为0,即两个数为异号,所以 要交换AL和BL中的内容,即AL=77H,BL=9AH。
习题4.17
• 设在数据段中有X,Y两个变量(字节单元),试编写程序 段计算(只写有关功能的指令). X 当X≥0时 • Y= │X│ 当X <0时
X Y
· · ·
DB DB
X Y
AL,X AL,0 DONE AL Y,AL
MOV CMP JGE NEG DONE: MOV
习题4.18
汇编语言程序设计(第四版)第2章【课后答案】讲解

汇编语言程序设计第四版【课后习题答案】--囮裑為檤第2章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(2)mov ax,bx(3)mov ax,[1200h](4)mov ax,[bx](5)mov ax,[bx+1100h](6)mov ax,[bx+si](7)mov ax,[bx][si+1100h]〔解答〕(1)AX=1200H(2)AX=0100H(3)AX=4C2AH ;偏移地址=bx=0100h(4)AX=3412H ;偏移地址=bx=0100h(5)AX=4C2AH ;偏移地址=bx+1100h=1200h(6)AX=7856H ;偏移地址=bx+si=0100h+0002h=0102h(7)AX=65B7H ;偏移地址=bx+si+1100h=0100h+0002h+1100h=1202h〔习题2.2〕指出下列指令的错误(1)mov cx,dl(2)mov ip,ax(3)mov es,1234h(4)mov es,ds(5)mov al,300(6)mov [sp],ax(7)mov ax,bx+di(8)mov 20h,ah〔解答〕(1)两操作数类型不匹配(2)IP指令指针禁止用户访问(3)立即数不允许传给段寄存器(4)段寄存器之间不允许传送(5)两操作数类型不匹配(6)目的操作数应为[ SI ](7)源操作数应为[BX+DI](8)立即数不能作目的操作数〔习题2.3〕已知数字0 ~ 9对应的格雷码依次为:18H、34H、05H、06H、09H、0AH、0CH、11H、12H、14H,它存在于以table为首地址(设为200H)的连续区域中。
汇编语言程序

2020/12/27
16
4.2.4 表达式
在80x86汇编语言中,有数值表达式和地址 表达式两种。
数值表达式 由各种常量与数值运算符连接而成的式子,
称为数值表达式。数值表达式的计算结果是 一个数值,它只有大小而没有属性。 算术、关系、逻辑运算符
2020/12/27
17
地址表达式
由常量、变量、标号、寄存器和数值运算符、 地址运算符组合而成的有意义的式子,称为 地址表达式,单个变量、标号是地址表达式 的最简形式。由于变量和标号具有段 (SEG)、偏移(OFFSET)、类型 (TYPE)3种属性,这就决定了对它们的访 问是多种形式的。
Байду номын сангаас第四章 汇编语言程序
4.1 汇编语句 4.2 汇编语言数据 4.3 8086指令系统 4.4 汇编语言伪指令 4.5 汇编源程序结构 4.6 上机操作过程
2020/12/27
1
4.1 汇编语句
4.1.1 语句种类 汇编语言有3种语句类型,指令语句、伪指令语句、宏指令语
句。
指令语句是可执行语句,在汇编时可产生供机器执行的二进制
2020/12/27
3
2.名字
名字是一串字符序列,最多包含31个字符。在汇 编语言中,名字的应用范围很广,有寄存器名、变 量名、常量名、标号、指令名等等。在语句格式中 作为第一可选成分出现的<名字>,在不同的语句 中具有不同的含义。它在指令语句中表示标号,后 面必须跟有冒号“:”;而在伪指令语句中表示变 量名,常量名,段名,过程名,后面不能有冒号。 这是两种语句在格式上的主要不同之处。
指令语句中的标号和伪指令语句中变量名,段名, 过程名是一种符号地址,可作为汇编指令的一个操 作数,但常量名不是符号地址,不能用做目的操作 数。不同的标号、变量和常量不能同名。
汇编语言典型例子详解汇编语言例子

汇编语言典型例子详解汇编语言例子汇编语言典型例子详解汇编语言是一种底层的编程语言,用于与计算机硬件进行交互和控制。
在计算机科学领域,学习汇编语言例子可以帮助我们深入了解计算机的工作原理和底层运行机制。
本文将详细解析几个典型的汇编语言例子,帮助读者更好地理解和掌握汇编语言编程。
1.加法运算的例子假设我们需要编写一个汇编语言程序来实现两个数字的加法运算。
以下是一个典型的汇编语言例子:```assemblysection .datanum1 db 5num2 db 3result db 0section .textglobal _start_start:mov al, [num1] ; 将num1的值加载到寄存器al中add al, [num2] ; 将num2的值与al中的值相加mov [result], al ; 将结果保存到result中; 输出结果到屏幕mov ah, 0x0E ; 设置打印字符的功能码mov al, [result] ; 将结果加载到al寄存器中add al, 30h ; 将结果加上字符'0'的ASCII码,使其变为可打印字符 int 10h ; 调用BIOS中断打印结果; 退出程序mov eax, 1 ; 设置退出系统调用号int 0x80 ; 调用系统调用中断退出程序```上述例子使用了汇编语言的指令和寄存器来完成加法运算,并将结果保存到result变量中。
最后,通过BIOS中断调用将结果打印到屏幕上,并使用系统调用中断退出程序。
2.循环控制的例子下面是一个使用汇编语言编写的简单循环控制的例子:```assemblysection .datacount db 10 ; 循环次数sum db 0 ; 计数器section .textglobal _start_start:xor rcx, rcx ; 清零计数寄存器rcxloop_start:cmp cl, [count] ; 比较计数寄存器和循环次数je loop_end ; 若相等,跳转到循环结束add cl, 1 ; 计数器自增1add [sum], cl ; 将计数器的值加到sum中jmp loop_start ; 无条件跳转到循环开始loop_end:; 输出结果到屏幕mov ah, 0x0E ; 设置打印字符的功能码mov al, [sum] ; 将sum加载到al寄存器中add al, 30h ; 将结果加上字符'0'的ASCII码,使其变为可打印字符 int 10h ; 调用BIOS中断打印结果; 退出程序mov eax, 1 ; 设置退出系统调用号int 0x80 ; 调用系统调用中断退出程序```上述例子使用了循环控制指令来实现对计数器和循环次数的操作。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
程汇题例序言语编.精品文档【例5.1】试编写一程序计算以下表达式的值。
w=(v-(x*y+z-540))/x式中x、y、z、v均为有符号字数据。
设x、y、z、v的值存放在字变量X、Y、Z、V中,结果存放在双字变量W之中,程序的流程图如图5.1所示。
DATA SEGMENTDW 200 XDW Y 100DW Z 3000DW V 10000DW2 DUP(?)WDATA ENDSSTACK SEGMENT STACKDB 200 DUP(0)STACK ENDS收集于网络,如有侵权请联系管理员删除.精品文档CODE SEGMENTASSUME DS:DATA,CS:CODE,SS:STACK START:MOV AX,DATAMOV DS,AX ;DATA→AXX ,MOV AXAX (*Y)→DX:IMUL Y;(X)MOV CX,AXMOV BX,DX ;(DX:AX)→(BX:CX)Z ,MOV AX )符号扩展;(Z CWDADD CX ,AXADC BX,DX;(BX :CX)+(DX:AX)→(BX:CX)SUB CX,540SBB BX,0 ;(BX:CX )-540→(BX:CX)V,MOV AX CWD ;(V)符号扩展SUB AX,CXSBB DX,BX;(DX:AX)-(BX:CX)→(DX:AX);(DX:AX )/XIDIV XMOV W,AX ;商→W;余数DXMOV W+2,DX→W+2收集于网络,如有侵权请联系管理员删除.精品文档MOV AH,4CHINT 21HENDS;退出DOS 状态CODEEND START【例5.2】已知某班学生的英语成绩按学号(从1开始)从小到大的顺序排列在TAB表中,要查的学生的学号放在变量NO中,查表结果放在变量ENGLISH中。
编写程序如下:STACK SEGMENT STACKDB200 DUP(0)STACK ENDSDATA SEGMENTTAB DB 80,85,86,71,79,96DB 83,56,32,66,78,84NODB 10DB ?ENGLISTDATA ENDSCODE SEGMENTASSUME DS:DATA,SS:STACK,CS:CODEBEGIN:MOV AX,DATAMOV DS ,AXLEA BX,TABMOV AL,NODEL ALXLAT TABMOV ENGLISH,ALMOV AH,4CHINT 21HCODEENDS收集于网络,如有侵权请联系管理员删除.精品文档END BEGIN【例5.3】已知在内存中有一个字节单元NUM,存有带符号数据,要求计算出它的绝对值后,放入RESULT单元中。
题目分析:根据数学中绝对值的概念知道,一个正数的绝对值是它本身,而一个负数的绝对值是它的相反数;要计算一个数的相反数,需要完成减法运算,即用0减去这个数。
8086/8088指令系统中有专门的求相反数的指令NEG。
DATA SEGMENTX DB -25RESULT DB ?DATA ENDSCODE SEGMENTASSUME DS:DATA,CS:CODESTART: MOV AX,DATAMOV DS,AX;初始化MOV AL,X ;X取到AL中;测试AL正负TEST AL,80HJZ NEXT ;为正,转NEXT收集于网络,如有侵权请联系管理员删除.精品文档NEG AL ;否则AL求补NEXT: MOV RESULT,AL ;送结果MOV AH,4CHINT 21H ;返回DOSCODE ENDSEND START【例5.4】编写计算下面函数值的程序:1 X>0Y= 0 X=0-1X<0设输入数据为X、输出数据Y,且皆为字节变量。
程序流程图如下图所示。
DATA SEGMENTX DB -25Y DB ?DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATA收集于网络,如有侵权请联系管理员删除.精品文档MOV DS,AX ;初始化MOV AL,X ;X取到AL中CMP AL,0 ;Al中内容和0比较JGEBIG;大于等于0,转BIGMOV BL,-1 ;否则为负数,-1送BLJMPEXIT ;转到结束位置EE;Al中内容是否为0,为0转EEBIG: JEMOV BL,1 ;否则为大于0,1送BLJMPEXIT ;转到结束位置BL,0 ;0送BLEE:MOVEXIT: MOV Y,BL ;BL中内容送Y单元MOV AH,4CHINT 21H ;程序结束CODE ENDS;汇编结束END START【例5.5】试编一程序,求三个带符号字数据中的最大值,并将最大值存入MAX 字单元中。
中存储。
程序流程图如下图Z、Y、X设三个带符号数分别在三个字变量所示收集于网络,如有侵权请联系管理员删除.精品文档STACK SEGMENT STACKDB 200 DUP(0)STACK ENDSDATA SEGMENTX DW 00ABHY DW –5DW 200ZDW ?MAXDATA ENDSCODE SEGMENTASSUME DS:DATA,SS:STACK,CS:CODESTART:MOV AX,DATAMOV DS,AX,X MOV AX Y;AX,Y X>?CMPL1JG;MOV AX ZY>?,YCMP AX ,ZJGEXITL2:MOV AX,ZJMP EXIT收集于网络,如有侵权请联系管理员删除.精品文档L1:CMP AX,Z ;X>Z?L2JLEEXIT:MOV MAX,AXAH,4CHMOVINT 21HCODE ENDSEND START【例5.6】设某程序有8路分支,试根据给定的N值(1~8),将程序的执行转移到其中的一路分支。
程序流程如图下所示。
DATA SEGMENTTAB DW P1,P2,P3,P4,P5,P6,P7,P8N DB 5DATA ENDSSTACK SEGMENTDB 200 DUP(0)STACK ENDSCODE SEGMENTASSUME DS:DATA,SS:STACK,CS:CODE收集于网络,如有侵权请联系管理员删除.精品文档START:MOV AX,DATAMOV DS,AX┆MOV AL,NDEL ALADD AL,ALMOV BL,ALMOV BH,0JMP TAB[BX]P1:……┆JMP EXITP2:……┆JMP EXITP2:……┆JMP EXITP3:……┆JMP EXIT┆P8:……┆EXIT:MOV AH,4CHINT 21HCODE ENDSEND START【例5.7】已知有几个元素存放在以BUF为首址的字节存贮区中,试统计其中正元素的个数。
收集于网络,如有侵权请联系管理员删除.精品文档显然,每个元素为一个8位有符号二进制数,统计其中正元素的个数可用循环程序实现。
其程序流程图如下图所示。
例5.8】编写程序完成求1+2+3+……N的累加和,直到累加和超过1000。
流程图如下图SUMCN为止。
统计被累加的自然数的个数送单元,累加和送所示。
收集于网络,如有侵权请联系管理员删除.精品文档DATA SEGMENTSUM DW ?CN DW ?DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AX ;初始化;0 送MOV AX,0AXMOV BX,0 ;0送BXLP: INC BX ;BX加1ADD AX,BX ;求累加和;比较CMP AX,1000JBE LP ;≤1000转MOV SUM,AXMOV CN,BX;送结果MOV AH,4CHINT 21H ;返回DOSCODE ENDSEND START;汇编结束【例5.9】在以BUF为首址的字存储区中存放有N个有符号数,现需将它们按大到小的顺序排列在BUF存储区中,试编写其程序。
收集于网络,如有侵权请联系管理员删除.精品文档我们采用冒泡排序算法从第一个数开始依次对相邻两个数进行比较,如次序对,则不交换两数位置;如次序不对则使这两个数交换位置。
可以看出,第一遍需比较(N-1)次,此时,最小的数已经放到了最后;第二遍比较只需考虑剩下的(N-1)个数,即只需比较(N-2)次;第三遍只需比较(N-3)次,……整个排序过程最多需(N-1)遍。
如下面的4个数即是采用冒泡排序比较的例子。
数10 8 16 90 32第一遍8 16 190 32 0第二遍8 90 132 6 10第三遍32891610程序流程图如图5.9所示。
收集于网络,如有侵权请联系管理员删除.精品文档DATA SEGMENTDW 3,-4,6,7,9,2,0,-8BUF ,-9,-10,20 N= ($-BUF)/2DATA ENDSSTACK SEGNMENT STACKDB 200 DUP(0)STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK START:MOV AX,DATAMOV DS,AXMOV CX,NDEC CXLOOP1:MOV DX,CXMOV BX,0LOOP2:MOV AX,BUF[BX]CMP AX,BUF[BX+2]JGELXCHG AX,BUF[BX+2]MOV BUF[BX],AXADD BX,2L:DEC CXJNE LOOP2收集于网络,如有侵权请联系管理员删除.精品文档MOV CX,DXLOOP LOOP1MOV AH ,4CHINT 21HCODE ENDSEND START程序运行后,BUF区中的内容如下:20,9,7,6,3,2,0,-4,-8,-9,-10若要对N个无符号数按由大到小的顺序排列,只需将指令“JGE L”改为“JAE L”即可。
【例5.10】将一个给定的二进制数按位转换成相应的ASCII码字符串,送到指定的存储单元并显示。
如二进制数10010011转换成字符串为‘10010011'。
要求将转换过程写成子程序,且子程序应具有较好的通用性,而必须能实现对8倍和16倍二进制数的转换。
入口参数:DX存放待转换的二进制数CX存放待转换数的位数(8 位或16位)DI 存放ASCII码首地址出口参数:转换后的字符串存放在以DI作指针的字节存贮区中程序清单:DATA SEGMENTNUM8 DB 93HNUM16 DW 0ABCDH20DUP(0)ASCBUFDBDATAENDS收集于网络,如有侵权请联系管理员删除.精品文档CODE SEGMENTASSUME DS:DATA,CS:CODE,SS:STACKSTART:MOV AX,DATAMOV DS,AXMOV DX,0MOV DL,NUM8 ;转换二进制数送DX;置位数8 8MOV CX,LEA DI,ASCBUF ;字符串首址→DICALL BTASC;调用子程序BTASCMOV [DI] ,BYTE PTR 0DHMOV [DI+1] ,BYTE PTR 0AH[DI+2],BYTE PTR ‘$'MOVLEA DX,ASCBUFMOV AH,9INT21HMOV DX,NUM16MOV CX,16;置位数16LEA DI ,ASCBUFCALL BTASCMOV [DL],BYTE PTR 0DHMOV [DL+1],BYTE PTR 0AHMOV [DL+2],BYTE PTR ‘$';显示转换后的字符串LEA DX,ASCBUF收集于网络,如有侵权请联系管理员删除.精品文档MOV AH,9INT 21HBTASC PROCPUSH AX;保存AXMOV AL,0CMP CX ,8 ;比较8位数JNEL1;直接转换16 位数;8位数转换送DHMOV DH,DLL1:DX最高位移入CFROL DX,,1;RCL AL,1 ;CF移入AL最低位ADD AL ,30HMOV [DI],ALINC DILOOP L1POP AXRETBTASC ENDPCODE ENDSEND START收集于网络,如有侵权请联系管理员删除.。