利用汇编语言编写求10个无符号数的大小

合集下载

汇编语言程序设计综合设计实验项目

汇编语言程序设计综合设计实验项目

汇编语言程序设计创新实验项目1. 编写一个完整的程序:根据零件的数量和总价格,计算出零件的单价。

主程序MAINPRO允许用户在键盘上输入零件数量和总价格;子程序SUBCONV 把从键盘输入的ASCII 码转化为二进制;子程序SUBCALC 计算出零件的单价;子程序SUBDISP 把二进制表示的单价转化为十进制数并显示出结果。

要求:在程序设计时要求使用顺序、分支、循环、子程序和宏汇编等多种方法解决程序设计问题,对于较大的子程序最好使用子程序嵌套,程序中如有多次重复的代码最好使用重复汇编。

2.编写一个完整的程序,分别输入有一个班学生的百分制成绩,根据学生百分制成绩转换出五级分数制。

如低于60分为E,60-69为D、70-79为C、80-89为B、90-99为A。

并统计该班学生人数。

要求:1、学生成绩从键盘接收;2、本程序可以重复运行,自行设计退出程序的方法;3、程序具有可操作性,如,应该有提示语句和判断非法操作的方法和处理方式。

3. 编写一个完整的程序,在屏幕上显示如图所示数字拼成的形状。

01234567891234567890234567890134567890124567890123567890123467890123457890123456890123456790123456784、按要求编写一个完整的程序。

要求:1、自BUFFER开始的内存单元中,存有一个ASCII码字符串。

查找已知字符串中含有多少个子字符串‘AB’的个数,将统计结果以十进制形式显示输出。

2、在查找到子字符串‘AB’后添加空格字符。

5、按要求编写一个完整的程序。

要求:1、编写子程序SORT,将内存中10个无符号字数据由小到大排序。

2、编写子程序FIND,在上述已排好的数据区里查找某一个数,若找到,显示其在数据区的位置,否则显示‘N’字符。

3、编写调用程序,完成排序及检索任务。

6、试编写一程序,要求根据用户键入的月份在终端上显示该月的英文缩写名。

汇编五套题

汇编五套题

汇编五套题一、单项选择题(在每小题的四个备选答案中,选出一个正确答案,并将正确答案的序号填在题干的括号内。

每小题1分,共16分) 1.用DEBUG调试汇编语言程序时,显示某指令的地址是2F80:F400,此时段寄存器CS的值是()A.F400HB.2F80HC.F4000HD.2F800H2.设DS=1100H,(12000H)=80H,(12001H)=20H,(12002H)=30H,执行MOV AX, [1000H]则AX=( )A.8000HB.0080HC.2080HD.8020H3.下列四条指令中错误的是( )A.MOV AX, [SI]B.MOV AX, [DI]C.MOV AX, [SI+DI]D.MOV AX, [SI-DI]4.下列四条指令执行后不影响标志位的是( )A.JNC NEXTB.CMP AX, BXC.SHL AX, 1D.OR AL, AL5.已知AX=0001H,下列四条指令执行后,不能使ZF=1的语句是( )A.DEC AXB.SUB AX, 1C.AND AX , 1D.CMP AX,16.使计算机执行某种操作的命令是( )A.伪指令B.指令C.标号D.助记符7.将数据5618H存放在存储单元中的伪指令是( )A. DATA1 DW 1856HB. DATA1 DB 18H,56HC. DATA1 EQU 5618HD. DATA1 DB 18H,00H,56H,00H8.若AX=3500H,CX=56B8H,当AND AX,CX指令执行后,AX=( )A. 1400HB. 77F8HC. 0000HD. 0FFFFH9.计算机处理问题中会碰到大量的字符、符号,对此必须采用统一的二进制编码。

目前,微机中普遍采用的是( )码。

A. BCD码B.二进制码C.ASCII码D.十六进制码10.用指令的助记符、符号地址、标号和伪指令、宏指令以及规定的格式书写程序的语言称为( )A.汇编语言B.高级语言C.机器语言D.低级语言11.汇编语言源程序中,每个语句可由四项组成,其中名字项是一个符号,下面列出的有效名字是()A.VariableB.First & ldC.0FFFFHD.'Memphis'12. ORG 0030HDA1 DB 0,'0',30HDW DA1数据为3000H字存储单元的偏移地址是()A.0030HB.0031HC.0032HD.0033H13.NUM1 DB(12 OR 6 AND 2)GE 0EHNUM2 DB(12 XOR 6 AND 2)LE 0EH上述数据定义语句中,NUM1和NUM2字节单元的内容分别是()A.NUM1=0,NUM2=0B.NUM1=0,NUM2=0FFHC.NUM1=0FFH,NUM2=0D.NUM1=0FFH,NUM2=0FFH14. 要求将A,B两个字符的ASCⅡ码41H,42H顺序存放在连续两个字存储单元中,可选用的语句是()A.DA1 DB 'AB'B.DA1 DW 'AB'C.DA1 DB 0ABHD.DA1 DW 0ABH15.DA1 EQU BYTE PTR DA2DA2 DW 0ABCDH┇SHL DA1,1SHR DA2,1上述指令序列执行后,DA2字存储单元的内容是()A.0ABCDHB.0AB9AHC.55CDHD.559AH16. 执行1号DOS系统功能调用,从键盘输入的字符值存放在()寄存器中。

汇编中有符号与无符号数的区分

汇编中有符号与无符号数的区分

汇编中有符号与无符号数的区分一、只有一个标准!在汇编语言层面,声明变量的时候,没有signed 和unsignde 之分,汇编器统统,将你输入的整数字面量当作有符号数处理成补码存入到计算机中,只有这一个标准!汇编器不会区分有符号还是无符号然后用两个标准来处理,它统统当作有符号的!并且统统汇编成补码!也就是说,db -20 汇编后为:EC ,而db 236 汇编后也为EC 。

这里有一个小问题,思考深入的朋友会发现,db 是分配一个字节,那么一个字节能表示的有符号整数范围是:-128 ~ +127 ,那么db 236 超过了这一范围,怎么可以?是的,+236 的补码的确超出了一个字节的表示范围,那么拿两个字节(当然更多的字节更好了)是可以装下的,应为:00 EC,也就是说+236的补码应该是00 EC,一个字节装不下,但是,别忘了“截断”这个概念,就是说最后的结果被截断了,00 EC 是两个字节,被截断成EC ,所以,这是个“美丽的错误”,为什么这么说?因为,当你把236 当作无符号数时,它汇编后的结果正好也是EC ,这下皆大欢喜了,虽然汇编器只用一个标准来处理,但是借用了“截断”这个美丽的错误后,得到的结果是符合两个标准的!也就是说,给你一个字节,你想输入有符号的数,比如-20 那么汇编后的结果是正确的;如果你输入236 那么你肯定当作无符号数来处理了(因为236不在一个字节能表示的有符号数的范围内啊),得到的结果也是正确的。

于是给大家一个错觉:汇编器有两套标准,会区分有符号和无符号,然后分别汇编。

其实,你们被骗了。

:-)二、存在两套指令!第一点说明汇编器只用一个方法把整数字面量汇编成真正的机器数。

但并不是说计算机不区分有符号数和无符号数,相反,计算机对有符号和无符号数区分的十分清晰,因为计算机进行某些同样功能的处理时有两套指令作为后备,这就是分别为有符号和无符号数准备的。

但是,这里要强调一点,一个数到底是有符号数还是无符号数,计算机并不知道,这是由你来决定的,当你认为你要处理的数是有符号的,那么你就用那一套处理有符号数的指令,当你认为你要处理的数是无符号的,那就用处理无符号数的那一套指令。

51汇编实现比较三个数的大小,并排序.doc

51汇编实现比较三个数的大小,并排序.doc

51汇编实现比较三个数的大小,并排序.doc例题1:比较三个无符号数的大小,按照从大到小的顺序排列关键的语句是:无符号数,因此所用语句是JAE实现跳转:此外比较两个操作数所用的是CMP,交换两个操作数的是XCHG 书上的代码:代码1:这样写法比较占用寄存器,但是寄存器之间交换数值比较快代码2:这样的写法只用了AL,但是寄存器与存储器操作数指教的操作比较慢例题2:写一个实现一位十六进制的数转换为对应的ASCII码的程序;程序功能,实现16进制数值转换成对应的ASCII码;原理:但十六进制数值为0到9的时候,对应的ASCII=x+30H ;当十六进制为10到15的时候,对应的ASCII=x+37H这里关键的语句是JA,大于9的话,转移之后便是程序跳转指令:JMP,但标号很多的时候,可以用LAB1,LAB2,LAB3这种类型的标号例题3:写一个程序实现ASCII转换成对应的十六进制利用地址表实现多向分支当要根据某个变量的值,进行多种不同的处理时,就会产生了多向分支,多向分支在高级语言中常常用switch实现,在汇编语言中是使用地址表实现的DSEGSEGMENT……………………COMTABDWCOMA,COMB,COMC,COMDDWCOME,COMF,COMG,COMHDSEGENDS……………………计算如果地址表内的地址,之后调用路口地址表即可之后跳转指令用这个JMPCOMTAB[BX]循环程序设计:例题1:用计数法控制循环本例程中所用的关键指令为LOOP,LOOP指令使用的方法是在初始化CX的初值,每次执行一次LOOP,CX寄存器会减一此外,还用了SI这个源地址指针,因为定义的变量时字,所以SI在循环的时候,调用了两次INC,在得到校验和的时候,重新设置了数据段寄存器,以便于保存校验和。

例题2:不用乘法指令实行乘法运算假设乘法时234*125,不用乘法指令,可以有移位和累加两种方法方法一:累加,可以看成是125个234相加,因此循环的时候,循环次数是CX=125,这里用的指令时XOR,自己和自己异或等于0,还有JCXZ这条指令,JCXZ表示但cx寄存器为0的时候跳转。

汇编语言课后习题答案---郑晓薇(整理后的)

汇编语言课后习题答案---郑晓薇(整理后的)

习题一1 无符号数: 11010011=211=D3H,01110111=119=77H,10000011=131=83H,00101111=47=2FH,10101010=170=AAH带符号数:11010011= -45=D3H,01110111=+119=77H,10000011= -125=83H,00101111=+47=2FH,10101010= -86=AAH25E8AH,0BE6H,3DEH,4940H300011101+00110101=01010010=5 2H=8201001001+11101000=00110001=3 1H=4910111110+01010010=00010000=1 0H=1610011010+11110001=10001011=8 BH= -117400101001+01010011=01111100+0 0000110=10000010=82H=82 01110011-00100100=01001111-00000110=01001001=49H=49 01100110+00011000=01111110+0 0000110=10000100=84H=84 0000000100110010+01110101=00 00000110100111+00000110=0000001000000111=0207H=207 5 000020A3H,FF94H,00003456H,007FH,FFFFEC00H6 无符号数:0~65535,0000H~FFFFH;带符号数:-32768~+32767,8000H~7FFFH7(1) 38H等于十进制数56,是十进制数56的补码,数字8的ASCII码,十进制数38的压缩BCD码(2) FFH等于十进制数-1,是带符号数-1的补码,无符号数为255(3) 5AH等于十进制数90,是十进制数90的补码,大写字母Z的ASCII码(4) 0DH等于十进制数13,是十进制数13的补码,回车符的ASCII码8(1) 108=01101100B=6CH,补码01101100B,压缩BCD码0000000100001000,ASCII码313038H(2) 46=00101110B=2EH,补码00101110B,压缩BCD码01000110,ASCII码3436H(3) –15=11110001B=F1H,补码11110001B,ASCII码2D3135H (4)254=0000000011111110B=00FEH,补码0000000011111110B,压缩BCD 码0000001001010100,ASCII码323534H9(1) 56+63=01110111B,CF=0,SF=0,ZF=0,OF=0(2) 83-45=00100110B,CF=0,SF=0,ZF=0,OF=0(3) -74+29=11010011B,CF=0,SF=1,ZF=0,OF=0(4) -92-37=01111111B,CF=1,SF=0,ZF=0,OF=110回车、换行、响铃、ESC键、空格键、@、P、p习题二9 最少划分为16个逻辑段,最多划分为65536个逻辑段〔每段16个字节〕10 CS:IP,DS:BX、SI、DI,ES:BX、SI、DI,SS:SP、BP11 字节单元保存8位数,字单元保存16位数。

汇编语言实现用16位乘法指令完成32位无符号数乘法

汇编语言实现用16位乘法指令完成32位无符号数乘法

汇编语⾔实现⽤16位乘法指令完成32位⽆符号数乘法《微型计算机原理与接⼝技术》实验报告⼀、程序设计题⽬⼀三⼗⼆位⽆符号乘法1 设计分析:(1)程序设计任务:⽤⼗六位乘法指令完成三⼗⼆位⽆符号数乘法(结果64位)。

使⽤MUL指令,完成双字⽆符号数乘法程序,要求乘数和被乘数从键盘输⼊,结果显⽰于屏幕上。

(2)程序设计要求:1)从键盘输⼊两个乘数(⼗六进制)2)结果显⽰于屏幕上(⼗六进制)(3)程序设计过程:1) 定义数据段⽤于开辟缓冲区存储输⼊数据、输出数据和乘积。

2)从键盘分别输⼊两个⼋位数字符(三⼗⼆字节)存⼊缓冲区(分4次输⼊,每次输⼊4个字符,前两次为被乘数的⾼位与低位,后两次为乘数的⾼位与低位)3)对缓冲区输⼊的字符进⾏处理,让Ascal码转换为数值本⾝的数值。

4)把三⼗⼆位分割成两位⼗六位,分别对其进⾏⼗六位的乘法。

5)将四个⼗六位乘法的乘积按照各⾃的位相加的最终乘积6)对所得结果进⾏处理,让Ascal码转换为数值本⾝的数值7)将结果向屏幕输出。

2、算法(⼀个框代表16位2进制数)3、X2 X1y1P+6 p+4 p+2 p4、程序流程图:5、测试数据与运⾏结果:输⼊被乘数的⾼位的4个字符X2:输⼊被乘数的低位的4个字符X1:输⼊乘数的⾼位的4个字符y2:输⼊乘数的低位的4个字符y1:运⾏结果:6、程序源代码及注解:ddata segmenty1 dw 16 dup(?)y2 dw 16 dup(?)p dw 30 dup(?)keybuf db 10 dup(?)ddata ends ;定义数据段ccode segmentassume cs:ccode,ds:ddatastart:mov ax,ddatamov ds,axmov dx,offset keybufmov bx,dxmov [bx],byte ptr 9mov ah,0ahint 21hmov ah,[bx+2]mov al,[bx+3]shl al,4shr ax,4mov dh,almov ah,[bx+4]mov al,[bx+5]shl al,4shr ax,4mov dl,almov x2,dx ;输⼊被乘数的⾼位的4个字符x2 mov dx,offset keybufmov bx,dxmov [bx],byte ptr 9mov ah,0ahint 21hmov ah,[bx+2]mov al,[bx+3]shl al,4mov ah,[bx+4]mov al,[bx+5]shl al,4shr ax,4mov dl,almov x1,dx ;输⼊被乘数的低位的4个字符x1 mov dx,offset keybufmov bx,dxmov [bx],byte ptr 9mov ah,0ahint 21hmov ah,[bx+2]mov al,[bx+3]shl al,4shr ax,4mov dh,almov ah,[bx+4]mov al,[bx+5]shl al,4shr ax,4mov dl,almov y2,dx ;输⼊乘数的⾼位的4个字符y2 mov dx,offset keybufmov bx,dxmov [bx],byte ptr 9mov ah,0ahint 21hmov ah,[bx+2]mov al,[bx+3]shl al,4shr ax,4mov dh,almov ah,[bx+4]mov dl,almov y1,dx ;输⼊乘数的低位的4个字符y1mov ax,x1mov dx,y1mul dxmov [p],axmov [p+2],dx ;被乘数低位4字符x1和乘数低位4字符y1相乘结果低位存⼊p,⾼位存⼊p+2mov ax,x2mov dx,y1mul dxadd [p+2],axadc [p+4],dx ;被乘数⾼位4字符x2和乘数低位4字符y1相乘结果低位存⼊p+2,⾼位存⼊p+4mov ax,x1mov dx,y2mul dxadd [p+2],axadc [p+4],dxadc [p+6],0 ;被乘数低位4个字符x1和乘数⾼位4个字符y2相乘结果低位存⼊p+2,⾼位存⼊p+4mov ax,x2mov dx,y2mul dxadd [p+4],axadc [p+6],dx ;被乘数⾼位4个字符x2和乘数⾼位4个字符y2相乘结果低位存⼊p+4,⾼位存⼊p+6mov al,byte ptr p+7 ;输出call dispalmov al,byte ptr p+6call dispalmov al,byte ptr p+5mov al,byte ptr p+3call dispalmov al,byte ptr p+2call dispalmov al,byte ptr p+1call dispalmov al,byte ptr pcall dispalmov ah,4chint 21hdispal proc ;⼦程序屏幕输出过程push cxpush dxpush axmov cl,4shr al,clor al,30hcmp al,3ahjb br1add al,7BR1: mov dl,almov ah,2int 21hpop axand al,0fhor al,30hcmp al,3ahjb br2add al,7br2: mov dl,almov ah,2int 21hretdispal endpccode endsend start题⽬⼆递归调⽤⼦程序设计1、设计分析:(1)程序设计任务:有n个⼈坐在⼀起,第n个⼈⽐第n-1个⼈⼤h岁。

微计算机原理与应用模拟题1

微计算机原理与应用模拟题1

模拟试卷1一.单项选择题(在每小题的四个备选答案中,选出一个正确的答案,并将其号码填在题后的括号内。

每小题1分,共10分。

错选、多选或未选均无分)1. 通常所说的32位机,指的是这种计算机的CPU()。

A. 是由32个运算器组成的B. 能够同时处理32位二进制数据C. 包含有32个寄存器D. 一共有32个运算器和控制器2. 在8086中用一个总线周期访问内存,最多能读/写()字节。

A.1个B.2个C.3个D.4个3. 设异步传输时的波特率为1200bps,若每个字符对应1位起始位,7位有效数据位,1位偶校验位,1位停止位,则每秒钟最多可传输()个字符。

A. 4800B. 120C. 480D. 12004. 堆栈的工作方式是()。

A. 先进先出B. 随机读写C.只能读出不能写入D. 后进先出5. 8088 CPU系统主存储器以()为单位编址。

A. 字节B. 字C. 双字D. 八字节6. 8088 CPU输入/输出指令可寻址外设端口的数量最大可达()个。

A. 128B. 256C. 16KD. 64K7. 在微型机中,往往将外设的状态作为一种数据输入,CPU的控制命令作为一种数据输出,为了将控制、状态与数据信息区分开,往往采用()进行分别传送。

A. 不同的信号线B. 不同的控制开关C. 不同的端口地址D. 不同的中断服务子程序8. 在主存储器和CPU之间增设高速缓冲存储器Cache的目的是()。

A. 扩大主存储器的容量B. 扩大CPU中通用寄存器的数量C. 解决CPU与主存储器之间的速度匹配问题D. 既扩大主存储器的容量又扩大CPU中通用寄存器的数量9. 8253芯片内部有完全独立的()。

A. 6个16位计数通道B. 3个16位计数通道C. 6个8位计数通道D. 3个8位计数通道10. 某存储器芯片容量为2K×4bit、若用它组成16K×8bit存储器组,所用芯片数以及用于组内寻址的地址线为()。

汇编语言实验心得

汇编语言实验心得

汇编语言实验心得汇编语言实验心得一.实验内容1.DEBUG的启动及其基本命令的使用2.内存操作数与寻址方式1)利用DEBUG程序中的“E”命令,将两个多字节数“12345678H”和“FEDCBA98H”分别送入起始地址为DS:0200H和DS:0204H两个单元中。

2)分别用直接寻址方式和寄存器间接寻址方式编写程序段,实现将DS:0200H单元和DS:0204H单元中的数据相加,并将运算结果存放在DS:0208H单元中。

3.顺序程序设计X、Y、Z、V均为字变量,在X、Y、Z、V字单元中存放是16位带符号数。

试编写汇编语言程序完成以下功能:①计算表达式值(V–(X*Y+Z-720))/X;②将上述表达式运算结果整数放在SUM1单元,余数放在SUM2单元。

4.分支程序设计1)设X,Y为字变量,假定不溢出,计算X=|X-Y|。

2)将NUM单元中的一位十六进制数(0~9,A~F),转换为对应的ASCII码值存入ASC单元。

3)已知字节变量X,编程求下列表达式即:当x0当x=0当x05.循环程序设计1)定义10个字节型带符号数,求其和。

2)在内存单元DATA中定义一个16位数,统计其16位中1的个数,存入内存的字单元COUNT。

3)定义10个字型无符号数,编写程序求其最小值。

6.子程序设计1)设计一个子程序,计算1+2+?+N,其中N为给定的正整数,且N小于100。

2)定义10个字型带符号数,编写子程序求其最大值和统计正数的个数。

3)从键盘接收4位十进制数,将其转换为十六进制数并显示。

二.实验心得上学期学习计算机组成原理的时候就对汇编有所了解,但通过这学期的学习,使我更加深入了解了其知识体系和计算机组成及内部程序执行的原理。

对于各命令的熟练掌握后,自己亲自动手实验更是体会到了各命令的用途及执行的方法。

通过各个基本命令可以轻松更改计算机内部寄存器的值和读写内存,磁盘,I/O端口的值,通过更改观察其对计算机的影响变化。

利用汇编语言编写找出10个无符号数中最大数和最小数分别存储程序

利用汇编语言编写找出10个无符号数中最大数和最小数分别存储程序

利用汇编语言编写找出10个无符号数中最大数和最小数分别存储程序一、要求:已知在DATA开始的字单元中存放有10个无符号整数,试编制程序挑选出其中的最大数并存放到MAXV单元中,挑选出最小数并存放到MINV单元中。

二算法分析1、求最大值:10个数据存储在限制为10个数据的数组中,BX中存储数组,将首地址数据赋值给AX,随后完成指针后移同时数据循环与AX比较,如果AX<[BX],那么 AX赋值给BX,否则指针后移,直到指针指到数组末尾时循环结束,最后将AX赋值给MAXV,然后调用DOS 输出数据。

2求最小值:将首地址数据赋值给AX,随后完成指针后移同时数据循环与AX比较,如果AX>[BX],那么 AX赋值给BX,否则指针后移,直到指针指到数组末尾时循环结束,将AX赋值给MAXV,然后调用DOS 输出数据。

三扩展应用顾名思义,此程序的设计是为了在无序的一组数据中挑选出其最值。

在实际中,这样的要应用许许多多,这样,我们可以把这个算法付诸实践,丰富我们的乐趣,使我们的程序设计从理论上升到实践,从而能力得到质的飞跃。

设想,再一次歌手比赛中,评委打完分后,计分原则是去头和尾,此时,本程序可以迅速查找到其最高分以及最低分,并删除之,这是一个很好的应用。

再看看我们的学校,每年必不可少的就是考试了,为了各项评比,我们需要选出最高分,无论怎么评比,只要设置一个关键字,定义其属性就可以得到最优秀的,这一应用节省了我们的时间,对比过去利用“穷举”的查找法,这无疑是质的飞跃啊!在软件中,可以用这种算法来实现数据、字符等的寻优操作。

总之,只要没有到共产主义社会,就会就会存在竞争,就存在优胜劣汰,从而少不了的就是选择更优秀,淘汰垃圾,那么查找最优或者最差的算法就不会淘汰。

四程图分析设计:程序分为查找、排序的主程序,以及它所要调用的循环程序,程序中包含有延时子程序,主程序为循环结构,以便循环比较,查找到最值。

查找最值程序中,可以按分如下结构化算法去编辑程序:(查找MAXV)(查找MINV)五结束语附录a:(源代码);..........................数据段 .......................... data segmentary db 30,16,8,-1,13,49,7,11,4,20 ;数组个数count db 10 ;数组元素个数max db ?min db ?address dw 4dup(?) ;地址表缓冲区data endsstack segment para stack 'stack'db 256dup(?)stack endscode segmentassume cs:code,ds:data ;..........................代码段 ..........................start:mov ax,datamov ds,axmov address, offset ary;mov address+2, offset countmov address+4, offset maxmov address+6, offset minlea bx,address ;地址表首地址送入寄存器BX call search ;搜索最大值及最小值mov al,maxcall outdata ;显示最大值call crlf ;回车换行mov al,mincall outdata ;显示最小值mov ah,4ch ;返回DOSint 21hsearch procpush bx ;现场保护push cxpush dxpush bppush sipush dimov bp,[bx+2] ;数组长度单元地址送入BPmov cx,ds:[bp] ;数组长度—》CXdec cxmov si,[bx+4]mov di,[bx+6]mov bp,[bx]mov dl,ds:[bp]mov [si],dlmov [di],dlinc bplop:mov dl,ds:[bp]cmp dl,[si]je nextmov [si],dljmp next minc:cmp dl,[di]jge nextmov [di],dl next:inc bploop loppop dipop sipop bppop dxpop cxpop bxretsearch endp outdata proc nearpush axpush bxpush cxpush dxmov bl,almov cl,4shr al,clor al,30hcmp al,3ahjb outhadd al,07h outh:mov dl,almov ah,02hint 21hmov dl ,bland dl,ofhor dl,30hcmp dl,3ahjb outladd dl,07h outl:mov ah,02hint 21hmov dl,'h'int 21hpop dxpop cxpop bxpop axretoutdata endpcrlf procpush axpush dxmov dl,0ahmov ah,2int 21hmov dl,0dhmov ah,2int 21hpop dxpop axretcrlf endpcode endsend start附录b: 参考书目1、沈美明 IBM-PC汇编语言程序设计2、张志明汇编语言程序设计3、耿秀华汇编语言程序设计4、沈美明、温东婵 IBM-PC汇编语言程序设计(第二版)。

实验二 无符号十进制数加

实验二 无符号十进制数加

实验二无符号十进制数加、减法实验一、实验目的1.掌握MCS-51汇编语言程序设计和调试方法。

2.熟悉KeilC的使用。

二、实验原理51单片机具有强的加、减、乘、除四种基本的数学运算功能,这些运算均是直接对8位无符号二进制数而言。

利用溢出标志,可以把加、减法操作于有符号的运算;利用十进制调整指令,又可以使运算直接用十进制数(BCD码)来运算。

1.加法有下列四种指令形式:1)ADD:完成A寄存器和第二数之间的加法,结果送A寄存器中。

2)ADDC:带进位加,同上操作,只是要加上前一次运算的进位CY的值。

以上指令均影响到标志位AC、CY、OV,P。

3)DA:十进制调整。

若A寄存器低4位的值(和数的低四位)大于9,或辅助进位标志AC=1(即第三位向第四位产生进位),则和数加6,以产生低四位正确的BCD码值。

同样,如果A寄存器的高四位的值大于9或CY=1,则高四位加6调整产生正确的高4位BCD码值。

加6调整后产生最高进位时,则置位CY。

注意:本指令只能紧跟加法指令(ADD或ADDC)的后面,其它无效。

4)INC:将源操作数加1,结果送回操作单元,不影响标志位。

加法指令有如下几条:ADD A,RnADD A,directADD A,@RiADD A,#dataADDC A,RnADDC A,directADDC A,@RiADDC A,#dataDA AINC AINC RnINC DPTRINC @RiINC direct2.51的减法指令只有两类:1.SUBB:带借位减。

从累加器A减去指定的变量进位标志,结果送回累加器A,它要考虑前一次运算操作对CY的影响。

因此,在做多字节减法时,第一次使用SUBB之前应将CY清尽。

2.DEC:将操作数减一,不影响标志。

归纳起来,减法指令有如下几条:SUBB A,Rn DEC RnSUBB A,direct DEC @RSUBB A,@Ri DEC ASUBB A,#data DEC direct由于没有十进制减法指令,为了用十进制加法调整,必须采用补码相加的办法,用9AH减去减数,即得出十为模的减数的补码。

汇编语言期末考试试题及答案

汇编语言期末考试试题及答案
14.在程序执行过程中,IP寄存器中始终保存的是参考答案为:B
A.上一条指令的首地址
B.下一条指令的首地址
C.正在执行指令的首地址
D.需计算有效地址后才能确定地址
[解析]在程序运行过程中,它始终指向下一条指令的首地址,它与CS代码段寄存器联合确定下一条指令的物理地址。
15.PSW寄存器中共有______位条件状态位,有______位控制状态位。参考答案为:A
C.内、外循环初值都应置外循环之外
D.内、外循环初值都应置内循环之外,外循环之内
[解析]循环参数置初值,应在进入循环以前给出。
6.条件转移指令JNE的测试条件为参考答案为:A
A.ZF=0
B.CF=0
C.ZF=1
D.CF=1
[解析]略。
7.8086CPU在基址加变址的寻址方式中,变址寄存器可以为参考答案为:DA.BX或CX
精品文档
汇编语言模拟试题及答案
一,单项选择题(在每小题的四个备选答案中,选出一个正确的答案,并将其号码填在题干后的括号内,每小题1分,共20分)
1.指令JMPFARPTRDONE属于参考答案为:C
A.段内转移直接寻址
B.段内转移间接寻址
C.段间转移直接寻址
D.段间转移间接寻址
[解析]略
2.下列叙述正确的是参考答案为:C
A.对两个无符号数进行比较采用CMP指令,对两个有符号数比较用CMPS指令B.对两个无符号数进行比较采用CMPS指令,对两个有符号数比较用CMP指令C.对无符号数条件转移采用JAE/JNB指令,对有符号数条件转移用JGE/JNL指令
D.对无符号数条件转移采用JGE/JNL指令,对有符号数条件转移用JAE/JNB指令

2

8088微机原理及接口技术报告

8088微机原理及接口技术报告

微机原理及接口技术实验报告课程(项目)名称:微机原理与接口技术学院:自动化专业:自控姓名:学号:指导教师:成绩:2014年11 月26 日实验一认识实验及多字节加减法程序一、任务与目的1. 实验任务:(1) 熟悉和掌握MASM汇编程序及TD调试软件的使用;(2) 熟悉代码段、数据段、堆栈段的结构;(3) 掌握8086/8088汇编程序的结构;(4) 掌握多字节加减法程序的编写。

2. 实验目的:(1). 掌握8086/8088汇编程序及调试程序的基本使用方法;(2) 熟悉8086/8088汇编语言编写的基本结构;(3) 熟悉多字节加减算术运算的基本方法。

二、原理(条件)1.相关知识:(1) MASM汇编程序及TD调试软件的使用方法;(2) 8086/8088汇编程序结构及算术运算等相关指令。

2.实验条件:MASM汇编程序及TD调试软件。

三、内容步骤1.启动TD(Turbo Debugger)输入程序段,观察执行情况并分析结果:(1) MOV BL,08HMOV CL,BLMOV AX,03FFHMOV BX,AXMOV [0200H],BXMOV ES:[0300H],AX(2) MOV AX,0A268HMOV SI,9D1CHADD AX,SIAX= 3F84H CF= 1 AF= 1 ZF= 0 PF= 1 OF= 1 SF= 0 ADD AL,30HAX= 3FB4H CF= 0 AF= 0 ZF= 0 PF= 1 OF= 0 SF= 1ADC AX,0FFFFHAX= 3FB3H CF= 1 AF= 1 ZF= 0 PF= 0 OF= 0 SF= 0分析:第一个是两个字相加,第二个是两个字节相加,第三个是两个字带进位相加,AX内结果改变的同时,FLAGS标志位也相应发生变化。

(3) 输入程序段,分步运行:MOV AX,0102HMOV BX,0304HMOV CX,0506HMOV DX,0708HPUSH AXPUSH BXPUSH CXPUSH DXPOP DXPOP CXPOP BXPOP AX分析:该段程序是对栈的操作,将AX,BX,CX,DX先后栈之后再出栈,观察到进栈出栈时栈内变化及SP指针值的变化。

汇编div的用法

汇编div的用法

汇编div的用法一、什么是汇编div指令在汇编语言中,div是除法指令,用于将一个无符号数除以另一个无符号数,得到商和余数。

二、div指令的语法div指令有两种形式: 1. div r/m8:将AX寄存器的值除以指定的源操作数(一个8位无符号数)。

2. div r/m16:将DX:AX寄存器的值除以指定的源操作数(一个16位无符号数)。

三、div指令的使用方法使用div指令进行除法运算时,需要注意以下几个方面。

1. 寄存器的使用•若进行8位除法运算,除数不能为零,并且结果的商存放在AL寄存器,余数存放在AH寄存器中。

•若进行16位除法运算,除数不能为零,并且结果的商存放在AX寄存器,余数存放在DX寄存器中。

2. 操作数的选择•单字节的除法运算只能使用寄存器或内存变量作为操作数。

•双字节的除法运算除了可以使用寄存器和内存变量作为操作数,还可以使用立即数作为操作数,但是除数不能为零。

3. 除数的大小•8位除法运算的除数是一个字节无符号整数,范围是0-255。

•16位除法运算的除数是一个字无符号整数,范围是0-65535。

4. 除法运算的结果•除法运算的结果是一个商和一个余数。

•商存放在指定的寄存器中,余数存放在指定的寄存器中。

四、div指令的示例以下是使用div指令进行除法运算的示例代码:section .datadividend db 10 ; 被除数divisor db 2 ; 除数section .textglobal _start_start:mov al, dividend ; 将被除数加载到AL寄存器中mov bl, divisor ; 将除数加载到BL寄存器中xor ah, ah; 清空AH寄存器div bl; 进行除法运算mov byte [quotient], al; 将商存放在[quotient]变量中mov byte [remainder], ah; 将余数存放在[remainder]变量中section .bssquotient resb 1 ; 存放商remainder resb 1 ; 存放余数五、总结通过本文的介绍,我们了解到了汇编语言中div指令的用法。

汇编语言-指令集

汇编语言-指令集

例:假设(SS) = 2250H , (SP) = 0140H 如果在堆栈中存入5个数据,则栈顶的物理地址是多少? 未存入数据之前物理地址=22500 + 0140=22640H 存入5个数据,栈顶的物理地址为: 22640 – 0A = 22636H
如果又从堆栈中取出3个数据,则栈顶的物理地址是多少? 22636 + 6 = 2263CH
80x86/8088指令系统 8086/8088的指令系统丰富,而且指令的功能也强。 大多数指令既能处理字数据,又能处理字节数据。 指令系统可分为如下6个功能组: (1)数据传送 (2)算术运算 (3)逻辑运算 (4)串操作 (5)程序控制 (6)处理器控制 汇编语言中,指令语句可由四部分组成,一般格式如下: [标号:] 指令助记符 [操作数1 [,操作数2]] [;注释]
例如:PUSH AX 假设(AX) = 2107H
(2)出栈指令POP 格式: POP DST 执行的操作:从堆栈顶弹出一个字数据到目的操作数DST。 步骤为: 1. 把堆栈指针寄存器SP所指的字数据送往目的操作数DST; 2. 堆栈指针寄存器器SP的值加2。 DST可以是通用寄存器、段寄存器(CS除外),也可以是字 存储单元
3.加1指令INC(INCrement) 其格式如下:INC OPRD (OPRD) <- (OPRD) + 1 功能:对操作数加1. OPRD可以是通用寄存器,也可以是存储单元。 指令执行的结果影响ZF、SF、OF、PF、AF, 但不影响CF. 改指令主要用于调整地址指针和用于计算器。
例:写出把首地址为BLOCK的字数组的第6个字送到DX寄存 器的指令。 (1)使用寄存器间接寻址 MOV BX , OFFSET BLOCK ADD BX , 000AH MOV DX , [BX] (2)寄存器相对寻址 MOV BX , OFFSET BLOCK MOV DX , [BX + 000AH]

计算机学院微机接口实验指导

计算机学院微机接口实验指导

计算机学院微机接口实验指导实验注意事项1.根据教材和实验指导,先预习实验内容;2.进入实验室,需遵守实验室的规章制度;3.在实验室一定要注意用电安全,爱护实验设备;4.每次进实验室,请自觉穿上鞋套;5.实验完成后需经老师验收方可离开;6.离开时请带自己的所有物品(包括一些废弃物);7.按时上交实验报告,实验报告用统一的实验报告纸或A4纸。

8.在安排的时间因事没有做的实验,不统一安排时间补做,自己找合适的时间来补。

实验一汇编语言程序设计实验一、实验目的熟悉汇编语言程序设计及TD-PITE80X86实验环境的使用。

二、实验设备PC机一台,TD-PITE实验装臵或TD-PITC实验装臵一套。

三、实验内容1.冒泡排序法在数据区中存放着一组数,数据的个数就是数据缓冲区的长度,要求采用冒泡法对该数据区中的数据按递增(或递减)关系排序。

设计思想:(1)从最后一个数(或第一个数)开始,依次把相邻的两个数进行比较,即第N个数与第N-1个数比较,第N-1个数与第N-2个数比较等等;若第N-1个数大于第N个数,则两者交换,否则不交换,直到N个数的相邻两个数都比较完为止。

此时,N个数中的最小数将被排在N个数的最前列。

(2)对剩下的N-1个数重复(1)这一步,找到N-1个数中的最小数。

(3)再重复(2),直到N个数全部排列好为止。

实验程序示例SSTACK SEGMENT STACKDW 64 DUP(?)SSTACK ENDSDATA SEGMENTARRY1 DB 。

DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSTART:。

MOV AX,4C00HINT 21H ;程序终止CODE ENDSEND START2.在数据段的3000H开始的存储单元中写入“0-9”的ASCII码值,将它们传送到同一段的4000H开始的存储单元中。

3.在数据段定义一个16位二进制数,将它转换为十进制ASCII码,并存入数据段。

微机原理及接口技术习题答案

微机原理及接口技术习题答案

第一章习题及答案1. 微处理器内部包含哪三大部分?解: 运算器、控制器和寄存器组。

2. 完成下列数制的转换①10101101B=( )D=( )H解:10101101B=173D=ADH 。

②0.11B=( )D解:0.11B=0.75D 。

③211.25=( )B =( )H解:211.25=11010011.01B=D3.4H 。

④10111.0101B=( )H=( )BCD解:10111.0101B=17.5H=23.3125D=(0010 0011.0011 0001 0010 0101)BCD3. 已知X=+1011010B ,Y =–0011011B ,设机器数为8位,分别写出X 、Y 的原码、反码和补码。

解:[][][]01011010B 01011010B 01011010B X X X ===原反补 [][][]10011011B11100100B 11100101BY Y Y ===原反补4. 已知X 的真值为32,Y 的真值为–19,求[]?Y X =+补解:[]00001101B X Y +=补5. 已知X=51,Y=–86,用补码完成下列运算,并判断是否产生溢出(设字长为8位)。

① X +Y ② X -Y③ –X +Y ④ –X -Y解:10100011B ,因为67C C 0⊕=,所以未产生溢出。

② 11110111B ,因为67C C 1⊕=,所以产生溢出。

③ 01110111B ,因为67C C 1⊕=,所以产生溢出。

④ 00100011B ,因为67C C 0⊕=,所以未产生溢出。

6. 若使与门的输出端输出高电平,则各输入端的状态是什么?解:各输入端为高电平。

7. 若使与非门的输出端输出低电平,则各输入端的状态是什么?解:各输入端为高电平。

8. 如果74LS138译码器的Y 4端输出低电平,则C 、B 、A 三个输入端的状态分别是什么?解:C 、B 、A 三个输入端的状态分别是‘1’,‘0’,‘0’。

微机原理和接口技术课后习题答案周明德

微机原理和接口技术课后习题答案周明德

微机课后习题答案第一章:1.1 IA- 32结构微处理器直至Pentium4,有哪几种?8086. 80286.80386.80486.Pentium.Pentium MMX. Pentium Pro. Pentium Ⅱ. Pentium Ⅲ1.2 80386和8086在功能上有哪些区别?(1)从16位扩展为32位(2)从保护模式到实模式(3)片内存储管理单元1.3 80486和80386在功能上有哪些区别浮点支持1.4 Pentium相对于80486在功能上有什么扩展?(1)页从4KB扩展到4MB(2)内部寄存器仍是32位,但为了加快数据传送,内部数据总线是128和256位,外部数据总线是64位(3)增加了可编程中断控制器,以支持多个奔腾处理器系统(4)Pentium MMX引入了多媒体扩展指令集技术(MMX)1.5 Pentium Ⅱ以上的处理器采用了什么结构。

P6系列的超标量微结构。

1.6徽处理器、微型计算机和微型计算机系统三者之间有什么不同?微处理器:将cpu集成在一块集成电路芯片上。

微型计算机:由微处理器,存储器,输入输出接口电路和输入输出设备组成。

微型计算机系统:由微型计算机与运行、管理、维护计算机的软件组成。

1.7 CPU在内部结构上由哪几部分组成?CPU应该具备哪些主要功能?组成:内部寄存器阵列,累加器和算术逻辑单元,指令寄存器,指令译码器和控制信号的产生电路。

功能:进行算术逻辑运算,控制计算机按照程序的规定运行。

1.8 微型计算机采用总线结构的优点。

增加了数据传送了灵活性,减少了芯片之间的连线,因而减少了连线所占的面积。

且总线可以标准化,有利于工业生产和兼容。

1.9数据总线和地址总线在结构上有什么不同之处?如果一个系统的数据和地址合用一套总线或者合用部分总线,那么要靠什么来区分地址和数据?区别:数据总线是双向的,地址总线是单向的。

区分:地址总线和数据总线是分时复用的,它们主要靠信号的时序来区分,通常在读写数据时,先发送地址,然后再将数据送到数据总线上。

汇编语言输入10个数排序并输出的实现

汇编语言输入10个数排序并输出的实现

汇编语⾔输⼊10个数排序并输出的实现⼀:题⽬描述在键盘输⼊任意10个数1. 按从⼩到⼤排序后,在计算机屏幕上先输出来。

要有结果提⽰(字符串显⽰)。

2. 将10个数做累加,结果在计算机屏幕显⽰累加和。

⼆:伪指令的定义1.数据段ATAS SEGMENTstring_1 DB 'Please input a numbers(0-65536):','$'string_2 DB 'ERROR: OVERFLOW! Please input again:','$'string_3 DB 'The array you have input is:',0ah,0dh,'$'string_4 DB 'After Sort the num is:',0ah,0dh,'$'string_5 DB ' ','$'DATA DW 10 DUP(?)massege DB 'The sum of the array is: ',0ah,0DH,'$'DATAS ENDS说明:string_1输⼊范围提⽰string_2输⼊错误提⽰string_3输出原数组提⽰string_4输出排序后数组提⽰string_5空格符DATA缓冲区数组2.堆栈段STACKS SEGMENTDW 256 dup(?)STACKS ENDS3.代码段CODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKS三:模块分解与实现1. DOS输⼊10个数字输⼊10个⽆符号数存⼊缓冲区,并且保证 num&lt;65536num &lt; 65536num<65536为何输⼊范围是65536呢⼀个字的最⼤表⽰范围是 FFFFFFFFFFFF 其在⼗进制的表⽰下为 65535HEX FFFFDEC65535BIN1111 1111 1111 11111.1 输⼊函数⼦程序;---------输⼊函数(单数字输⼊)------------Input PROC Nearpush AXpush BXpush CXpush DX;---------输⼊提⽰--------------MOV BX, 0CLCMOV DX, 0;----------输⼊数字--------------Lp_0:MOV AH, 1INT 21HCMP AL, 20H ;回车JE L_CRLF;----- x belong to [0,9] ----------SUB AL, 30H ; ASCII -> intJL L_ERRORCMP AL, 9JG L_ERROR;------- string -> int -----------MOV AH, 0 ;将 AL扩展成 AXXCHG AX, BX ;保护 AX值MOV CX, 10MUL CX ; bx *= 10ADD AX , BXJC L_ERROR ; OVERFLOW处理XCHG AX, BXJMP Lp_0L_ERROR:MOV DX, 0MOV BX, 0CALL CRLF ; 换⾏CALL ERROR ; 输出错误提⽰JMP Lp_0L_CRLF: ; 以换⾏作为⼀个数的结束标志MOV DX, 0MOV DATA[SI], BX ;解析函数功能:本质类似于⾼精度计算,将读⼊的⼀个串转成数字存储在DATA数组中分成三⼤部分⼀:输⼊提⽰⼆:错误判断及提⽰三:转化为数字L_ERROR 错误处理L_CRLF 结束处理我们来举⼀个123412341234 的例⼦Register1234AX1234BX0112123CX10101010AX+(BX∗CX)AX + (BX * CX)AX+(BX∗CX)最后将结果存储在DATA数组⾥2.实现冒泡排序冒泡排序作为⼀个简单的排序算法,时间复杂度 O(n2)O(n^2)O(n2) 需要两层循环,为了提⾼代码的可读性,我们将内层的循环写成⼀个⼦程序每次调⽤内层循环很简单,每次从头⽐到尾,遇到⽐它⼩的交换就可以了。

用汇编语言求一个16位无符号数的整数平方根程序

用汇编语言求一个16位无符号数的整数平方根程序

用汇编语言求一个16位无符号数的整数平方根程序一、实验目的:求一个16位无符号数的整数平方根二、实验原理:1、利用16位微机处理器8680/8088系统汇编语言的基本法则、表达式、运算符、常用的伪指令和dos功能调用以及汇编设计的基本方法;2、汇编语言程序的分段结构、语句格式、表达式和运算符;3、变量定义伪指令、段指令伪指令以及其他常用伪指令的功能;4、顺序、分支、循环、子程序等四类结构程序的特点和编程方法。

三、实验程序设计:; exm 3-5. asm get sqare rootdata segmentx dx 4578hroot root dw0x0 equ 256data endsstack segment stack‘stack’db 100 dup(‘s’)stack endscode segment para‘code’assume cs: code, ds: data, ss: stackStart: proc farpush dsxor ax , axpush axmov ax , datamov ds , axmov ax , xmov dx , 0mov di , x0div dimov di , axcntu : mov si , di ; SI = x(n-1)mov ax , xmov dx , 0div si ; k/x(n-1)=AXadd ax , si ; AX + x(n-1)shr ax , 1 ; AX /2mov di , ax ; DI =x(n)sub ax , si ; x(n) -x(n-1)je donecmp ax , 1je donecmp ax , -1jne cntu ; / x(n) -x(n-1) / > 1 (继续循环)done : mov root , di ; / x(n) -x(n-1) / ≤ 1 retstart endpcode endsend start四、实验流程成图如下:N取kK/x0 =x1 (存入SI)K/x1+x1除2得x2(存入DI中)X2 - x1=0 ?=1?=-1?X1X2存入平方根返回NNYYY。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

利用汇编语言编写求10个无符号数的大小利用汇编语言编写求10个无符号数的大小一、要求:
已知在DATA开始的字单元中存放有,,个无符号整数,试编制程序挑选出其中的最大数并存放到MAXV单元中~挑选出最小数并存放到MINV单元中。

二算法分析
1、求最大值:10个数据存储在限制为10个数据的数组中~BX中存储数组~将首地址数据赋值给AX,随后完成指针后移同时数据循环与AX比较~如果AX<[BX],那么 AX赋值给BX~否则指针后移~直到指针指到数组末尾时循环结束~最后将AX赋值给MAXV~然后调用DOS输出数据。

2求最小值:将首地址数据赋值给AX,随后完成指针后移同时数据循环与AX比较~如果AX>[BX],那么 AX赋值给BX~否则指针后移~直到指针指到数组末尾时循环结束~将AX赋值给MAXV~然后调用DOS输出数据。

三扩展应用
顾名思义~此程序的设计是为了在无序的一组数据中挑选出其最值。

在实际中~这样的要应用许许多多~这样~我们可以把这个算法付诸实践~丰富我们的乐趣~使我们的程序设计从理论上升到实践~从而能力得到质的飞跃。

设想~再一次歌手比赛中~评委打完分后~计分原则是去头和尾~此时~本程序可以迅速查找到其最高分以及最低分~并删除之~这是一个很好的应用。

再看看我们的学校~每年必不可少的就是考试了~为了各项评比~我们需要选出最高分~无论怎么评比~只要设置一个关键字~定义其属性就可以得到最优秀的~这一应用节省了我们的时间~对比过去利用“穷举”的查找法~这无疑是质的飞跃啊:
在软件中~可以用这种算法来实现数据、字符等的寻优操作。

总之~只要没有到共产主义社会~就会就会存在竞争~就存在优胜劣汰~从而少不了的就是选择更优秀~淘汰垃圾~那么查找最优或者最差的算法就不会淘汰。

四程图分析设计:
程序分为查找、排序的主程序~以及它所要调用的循环程序~程序中包含有延时子程序~主程序为循环结构~以便循环比较~查找到最值。

查找最值程序中~可以按分如下结构化算法去编辑程序:
(查找MAXV)
(查找MINV)
五结束语
附录a:(源代码) ;..........................数据段 .......................... data segment
ary db 30,16,8,-1,13,49,7,11,4,20 ;数组个数
count db 10 ;数组元素个数
max db ?
min db ?
address dw 4dup(?) ;地址表缓冲区 data ends
stack segment para stack 'stack'
db 256dup(?)
stack ends
code segment
assume cs:code,ds:data
;..........................代码段 ..........................
start:
mov ax,data
mov ds,ax
mov address, offset ary;mov address+2, offset count mov address+4, offset max mov address+6, offset min lea bx,address ;地址表首地址送入寄存器BX
call search ;搜索最大值及最小值 mov al,max
call outdata ;显示最大值 call crlf ;回车换行
mov al,min
call outdata ;显示最小值 mov ah,4ch ;返回DOS int 21h
search proc
push bx ;现场保护 push cx
push dx
push bp
push si
push di
mov bp,[bx+2] ;数组长度单元地址送入BP mov cx,ds:[bp] ;数组长度—》CX dec cx
mov si,[bx+4]
mov di,[bx+6]
mov bp,[bx]
mov dl,ds:[bp]
mov [si],dl
mov [di],dl
inc bp
lop:
mov dl,ds:[bp]
cmp dl,[si]
je next
jl minc
mov [si],dl jmp next minc:
cmp dl,[di] jge next mov [di],dl
next:
inc bp
loop lop pop di
pop si
pop bp
pop dx
pop cx
pop bx
ret
search endp
outdata proc near
push ax
push bx
push cx
push dx
mov bl,al mov cl,4 shr al,cl or al,30h cmp al,3ah jb outh add al,07h
outh:
mov dl,al mov ah,02h int 21h
mov dl ,bl and dl,ofh or dl,30h cmp dl,3ah jb outl
add dl,07h
outl:
mov ah,02h int 21h
mov dl,'h'
mov ah,2
int 21h
pop dx
pop cx
pop bx
pop ax
ret
outdata endp crlf proc
push ax
push dx
mov dl,0ah mov ah,2
int 21h
mov dl,0dh mov ah,2
int 21h
pop dx
pop ax
ret
crlf endp
code ends
end start
附录b: 参考书目
1、沈美明 IBM-PC汇编语言程序设计
2、张志明汇编语言程序设计
3、耿秀华汇编语言程序设计
4、沈美明、温东婵 IBM-PC汇编语言程序设计(第二版)。

相关文档
最新文档