2022年微机原理软件实验报告.docx

上传人:C****o 文档编号:79922239 上传时间:2023-03-22 格式:DOCX 页数:68 大小:1.44MB
返回 下载 相关 举报
2022年微机原理软件实验报告.docx_第1页
第1页 / 共68页
2022年微机原理软件实验报告.docx_第2页
第2页 / 共68页
点击查看更多>>
资源描述

《2022年微机原理软件实验报告.docx》由会员分享,可在线阅读,更多相关《2022年微机原理软件实验报告.docx(68页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、精选学习资料 - - - - - - - - - 信息与通信工程学院微机原理软件试验报告班 级:姓 名:班内序号:名师归纳总结 学号:第 1 页,共 37 页日期: 2022 年 11 月- - - - - - -精选学习资料 - - - - - - - - - 一、试验目地 :试验一 DEBUG地使用 1.把握汇编程序地编辑 ,编译,连接和执行地全过程; 2.学习和把握用 DEBUG调试程序地方法 . 二、试验内容 : 1.用编辑软件 ,输入以下汇编语言源程序 : DAT SEGMENT A DB 20 ;自定 B DB 15 ;自定 Y DB 3 DUP0 Z DB 0,0 DAT END

2、S STA SEGMENT STACK DW 50 DUP. STA ENDS COD SEGMENT ASSUME CS:COD,DS:DAT STAR PROC FAR PUSH DS XOR AX,AX PUSH AX MOV AX,DAT MOV DS,AX MOV AX,STA MOV SS,AX MOV AL,A MOV Z,AL MOV Z+1,AL CALL SUB1 MOV AL,B MOV Z,AL MOV Z+1,AL CALL SUB1 MOV AL,A MOV Z,AL MOV AL,B MOV Z+1,AL CALL SUB1 ADD WORD PTR Y,AX A

3、DC BYTE PTRY+2,0 RET STAR ENDP SUB1 PROC 名师归纳总结 - - - - - - -第 2 页,共 37 页精选学习资料 - - - - - - - - - MOV AL,Z MOV AH,Z+1 MUL AH ADD WORD PTR Y,AX ADC BYTE PTRY+2,0 RET SUB1 ENDP COD ENDS END STAR 2.通过编译 ,连接形成可执行文件 . 3.用 DEBUG 将可执行文件调入 ,并进行调试 . 1用 D 命令观看数据区在内存中地详细内容,记录单元 A 和 B 地详细地址 . 2用 U 命令对目标代码反汇编 ,观

4、看反汇编后地结果 .留意发觉源程序地起始 位置 , 并记录这个起始地址 . 3用 T 命令作单步跟踪调试 .比较每条指令执行后地结果和原先地懂得是否 一样 .得出程序运行地结果 :它们是写在什么单元 ,详细内容是什么;并判定结果 是否正确 . 4在子程序 SUB1 地入口处设一断点 ,用 G 命令执行程序 . 在断点处观看堆 栈地内容 ,比较堆栈地内容和程序返回地址是否一样 . 5用 E 命令修改单元 A,B 地内容 ,重新执行程序 ,并记录结果 . 6用 M 命令和 A 命令对程序进行修改 : 将主程序中最终两条指令 ADD 和 ADC 修改为一条 CALL SUB1 指令,重新执行程序 .

5、 7退出 DEBUG. 4.重新使用编辑软件 ,把源程序最终一句中地 STAR 去掉.再次生成可执行文件 , 并用 DEBUG 调入内存 .当使用 U 命令时 ,显示地结果与前一次 未加 STAR 地结果 有何不同 .三、预习题 : 1.熟识常用地 DEBUG 命令. 2.阅读并分析程序地功能 . 3.如 SS=2000H,SP=FFFFH, 向堆栈中压入 4 字节数据后 ,如何用 D 命令显示压入堆 栈地内容 .答:使用 debug 指令 “ d 2000:0000 ”即可显示压入堆栈地内容,这是由于会溢出,变成 0000.SP+1 四、试验过程名师归纳总结 - - - - - - -第 3

6、 页,共 37 页精选学习资料 - - - - - - - - - 如上图,通过 masm 和 link 命令程序编译连接胜利 . 进入 debug 中,用 u 命令查看反编译结果 .得出 A 地地址为: 0B88:0000,值为1BH,即十进制地 27D;B 地地址为: 0B88:0001,值为 33,即十进制地 51D.Y地偏移地址为 0002H,Z 地偏移地址为 0005H.DATA段基地址为 0B88H. 名师归纳总结 SUB1子程序段入口地址为003F. 第 4 页,共 37 页- - - - - - -精选学习资料 - - - - - - - - - 如上图所示,用 E 命令将 A

7、 和 B 地值由 1EH,33H改为 10H,20H,通过 d 命令重 新查看 A,B地数值,发觉转变胜利 .通过 U 命令查看反汇编结果,在 步调试 . CALL SUB1即 CALL 003F处设置一个断点,单上图为用 t 命令单步运行结果,执行 SUB1之后返回主程序时 CS为 0B88,IP为001A,压入堆栈地 IP 值已经弹出, CS,IP已经指向下一条指令 .上图为用用 M 命令和 A 命令对程序进行修改 : 将主程序中最终两条指令 ADD 和名师归纳总结 ADC 修改为一条 CALL SUB1 指令 ,重新执行程序 .第 5 页,共 37 页- - - - - - -精选学习资

8、料 - - - - - - - - - 如上图所示,将源代码中最终一句END STAR改成 EDN,发觉编译连接均可通过,但是 DEBUG时显现了严峻地错误,没有 END STAR语句,编译器将不知道代码段地入口地址是多少,导致从数据段开头译码,后续译码全部紊乱 .END STAR地作用是指示编译器程序终止,同时告知编译器程序执行时代码段地入口地址 .五、试验总结本次试验我初步明白了汇编语言地调试过程.试验之前我仍觉得汇编语言过于抽象,难以看懂 .试验中我使用 -t与-d相结合地方法,逐步调试并查看该步对寄存器及内存地影响,最终对汇编语言有了入门地熟识 点:.试验中应留意以下几在debug 过

9、程中,任何储备器单元都无法用标号来识别,要使用它们,只能使 用物理地址调用 .使用u 指令修改 asm 代码时要对比反汇编地结果,如要删去某条指令,可以找到那条指令在代码段地偏移地址,再用u 指令将其修改为 NOP(从该指令开头到下一条指令开头地地址-1 处) .可以结合 r 指令、 t 指令、已经用 g 指令设置断点来诊断问题 .试验二分支、循环程序设计 一、试验目地1.开头独立进行汇编语言程序设计;2.把握基本分支,循环程序设计;3.把握最简洁地 DOS 功能调用 .二、试验内容1.支配一个数据区,内存有如干个正数,负数和零.每类数地个数都不超过 9.名师归纳总结 2.编写一个程序统计数据

10、区中正数,负数和零地个数.第 6 页,共 37 页- - - - - - -精选学习资料 - - - - - - - - - 3.将统计结果在屏幕上显示 .4.(扩展题)统计出正奇数、正偶数,负奇数、负偶数以及零地个数 .三、预习摸索1. 十进制数 0 9 所对应地 ASCII 码是什么?如何将十进制数 0 9 在屏幕上显示出来?答:09 分别对应 ASCII码地 30H39H.欲将十进制数 09 显示在屏幕上,只需要用二进制数09 分别加上 30H 即可 .2. 如何检验一个数为正,为负或为零?你能举出多少种不同地方法?答:方法有多种,现举出两种.一是直接用 CMP命令和 0 比较,然后用

11、JZ等命令进行判定;二是和0 相比是否相等,然后用该数(假设为8 位)和10000000 相与,取出符号位判定,可区分正负.其余方法大同小异,核心地思想是要么直接和 0 相比,要么使用规律或移位运算,取出符号为进行判断.四、试验流程图名师归纳总结 - - - - - - -第 7 页,共 37 页精选学习资料 - - - - - - - - - 开头定义数据段,储备待判定数字以及存放 正奇数,正偶数,负奇数,负偶数,零 的个数初始化数据段DS,SI指向待比 较的数字是等于0是当前数据大 于等于 0否调用 IDIV 指令除以 2余数为 0否否余数非 0零的个数加调用 IDIV 指令除以 2负奇数

12、个数负偶数个数一余数非 0余数为 0加1加1正奇数个数正偶数个数加1加1是否比较完 全部数据是输出统计结果终止五、试验源代码DATA SEGMENT BUFF DB -1,-4,0,1,2,3,4,-1,-2,-3,-4,-5,-8,-10 COUNT EQU $-BUFF COUNT1 DB 0 ;正奇数COUNT2 DB 0 ;正偶数COUNT3 DB 0 ;负奇数COUNT4 DB 0 ;负偶数COUNT5 DB 0 ;0 地个数BUF1 DB POSITIVE ODD:$ BUF2 DB POSITIVE ENEN:$ BUF3 DB NEGATIVE ODD:$ 名师归纳总结 - -

13、 - - - - -第 8 页,共 37 页精选学习资料 - - - - - - - - - BUF4 DB NEGATIVE ENEN:$ BUF5 DB ZERO:$ CR DB 0DH,0AH,$ DATA ENDS STACK SEGMENT STACK STACK DB 100 DUP. STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK BEGIN: MOV AX,DATA MOV DS,AX MOV CX,COUNT MOV SI,OFFSET BUFF AGAIN: MOV AL,SI MOV AH,0 MOV BL,

14、2 CMP AL,00H JGE PLU ;假如大于或等于 0 就进入 PLU IDIV BL OR AH,0 JZ MO ;假如余数为 0,就为负偶数 JNZ MJ ;假如余数不为 0,就为负奇数MO: INC COUNT4 ;负偶数 JMP EXIT MJ: INC COUNT3 ;负奇数 JMP EXIT PLU: JZ ZER ;为 0 跳转IDIV BL OR AH,0 JZ PO ;假如余数为 0,就为正偶数JNZ PJ ;假如余数不为 0,就为正奇数ZER: INC COUNT5 ;0 地个数加一PO: JMP EXIT INC COUNT2 ;正偶数JMP EXIT PJ: I

15、NC COUNT1 ;正奇数 JMP EXIT EXIT: INC SI LOOP AGAIN MOV DX, OFFSET BUF1 名师归纳总结 - - - - - - -第 9 页,共 37 页精选学习资料 - - - - - - - - - MOV AH, 09H INT 21H MOV DL, COUNT1 ADD DL,30H MOV AH, 02H INT 21H MOV DX, OFFSET CR MOV AH, 09H INT 21H MOV DX, OFFSET BUF2 MOV AH, 09H INT 21H MOV DL, COUNT2 ADD DL,30H MOV A

16、H, 02H INT 21H MOV DX, OFFSET CR MOV AH, 09H INT 21H MOV DX, OFFSET BUF3 MOV AH, 09H INT 21H MOV DL, COUNT3 ADD DL,30H MOV AH, 02H INT 21H MOV DX, OFFSET CR MOV AH, 09H INT 21H MOV DX, OFFSET BUF4 MOV AH, 09H INT 21H MOV DL, COUNT4 ADD DL,30H MOV AH, 02H INT 21H MOV DX, OFFSET CR MOV AH, 09H INT 21H

17、 MOV DX,OFFSET BUF5 MOV AH, 09H INT 21H MOV DL, COUNT5 名师归纳总结 - - - - - - -第 10 页,共 37 页精选学习资料 - - - - - - - - - ADD DL,30H MOV AH, 02H INT 21H MOV DX, OFFSET CR MOV AH, 09H INT 21H MOV AX,4C00H INT 21H CODE ENDS END BEGIN 六、试验思路本次试验要求统计一组 8 位 16 进制数中地正负奇偶数以及零地个数,我实行了 先与 0 比较,得出正负数和零,然后分别对于正负数进行带符号地

18、除法运算,通过判定余数是否为零判定该数是偶数仍是奇数 法指令)后, 8 位数除以 4 位数地余数存放在 比较 AL 与 0 地关系判定特别偶数 .编译运行程序结果如下:.执行 IDIV 指令(带符号数地除 AX寄存器地高 8 位 AL中,通过名师归纳总结 - - - - - - -第 11 页,共 37 页精选学习资料 - - - - - - - - - 七、试验总结这是第一次正式做微原软件地试验,仍是遇到了不少困难地 .第一就是对代码地不熟识以及对编程环境地不习惯 .总是习惯用 C语言编程地习惯来写代码,所以采纳了除法判定余数地方法区分奇偶数 .程序写完之后始终提示 out of memer

19、y,百度了之后发觉原先是不当心把单引号写成了中文默示里面地引号 .程序编译通过之后,运行结果始终不对,就用了debug 命令查错 .发觉判定到负数地时候总是进入正数地程序里,自习检查程序,原先是用 AL 存放 8 位数地时候,最高位 是符号位,但是 AH 是全 0 地,导致了 AX和 0 比较地时候不会显现小于 0 地情 况.更换为 AL与 00H 比较就解决了这一问题 .下次试验会更加认真,尽量采纳硬件地思想去编程,像此题地判定奇偶数假如 用最终位是否为 0 判定会更简洁 . 试验三代码转换程序设计一、试验目地 1.把握几种最基本地代码转换方法; 2.运用子程序进行程序设计 . 二、试验内容

20、1.从键盘上输入如干两位十进制数 出来 . ,查找其中地最小值 ,然后在屏幕上显示名师归纳总结 2.两个十进制数之间地分隔符,输入终止标志自定 ,但要在报告中说明 . 第 12 页,共 37 页- - - - - - -精选学习资料 - - - - - - - - - 3.对输入要有检错措施 ,以防止非法字符输入 ,并有适当地提示 . 4.将整个程序分解为如干模块,分别用子程序实现 .在报告中要给出模块层次图. 三、预习摸索1. 如何将输入地两个字符 09变为十进制或二进制数?答:输入地字符 09 是 ASCII码表示地,对应于 30H39H,通过减去30H,可以转换为相应地运算机数 .2.

21、如何将选出地最小值 二进制或十进制 变为 ASCII 码再进行显示?答:假如采纳输入时把ASCII 码转换为数字,然后比较数字地大小再输出,那么输出时仍需要把数字再次转换为 ASCII 码.这样比较麻烦, ASCII码也可以直接比较大小 .可以直接读入并储备数字地 ASCII 码,然后直接输出 ASCII码即可 .3. 你觉得采纳二进制运算仍是十进制运算更适合于这个试验?答:采纳二进制或者十进制都需要进行ASCII码到数字地转换和其反向转换,都比较麻烦,增大了代码复杂度 .可以直接使用数字对应地 ASCII比较,分别比较十位和个位,最终直接输出字符即可 .四、程序流程图名师归纳总结 - - -

22、 - - - -第 13 页,共 37 页精选学习资料 - - - - - - - - - 初始化数据区及寄存器是 调用 GETNUM 子程序是否有输入错误发生否调用 FINDMIN子程序调用 SHOW 显示子程序,显示提示信息减去 30H,输出最小数终止程序图一总程序流程图名师归纳总结 - - - - - - -第 14 页,共 37 页精选学习资料 - - - - - - - - - 爱护现场调用 DOS命令输入 单个字符否 是否是回车符否CX是否为 0是是CX是否为 1当前输入是否 空格否是CX是否为 2当前已经输入了一位,当前是不是空格是当前已经输入了两位,否否当前是不是空格CX清零是

23、是是是输入字符是否合法将输入的字符存入否错误 1,调用显示寄存器,并修改子程序CX,DI错误 2,调用显示 子程序错误 3,调用显示 子程序否错误 4,调用显示是子程序输入的数字格式是否 为 0否是否是两位数复原现场图二猎取键盘输入子程序名师归纳总结 - - - - - - -第 15 页,共 37 页精选学习资料 - - - - - - - - - 压栈,爱护现场设置各寄存器值否否当前数的十位比当前最小数的个是位大当前数的个位比当前是全部数字比较终止最小数的个位大否将当前数字设为最小数是将当前最小数返回主程序复原现场图三查找最小数五、程序源代码及说明DATA SEGMENT ERROR1 D

24、B error: the number is not valido,$ ERROR2 DB error: the input number must contains two digits,$ ERROR3 DB error: empty,$ ERROR4 DB error: lack of kongge,$ RESULT DB error: the smallest num is:,$ CR DB 0DH,0AH,$; 回车换行COUNT DB 0 ;存放数地总数NUM DB 100 DUP. ;存放输入地数字MIN DB 9-30H,9-30H ;存放最小地数字SIG DB 0D ;错误标

25、志位DATA ENDS STACK SEGMENT STACK STACK DB 100 DUP. STACK ENDS 名师归纳总结 - - - - - - -第 16 页,共 37 页精选学习资料 - - - - - - - - - CODE SEGMENT ASSUME DS:DATA,CS:CODE,SS:STACK MAIN PROC FAR MOV AX,DATA MOV DS,AX CALL GETNUM CMP SIG,1 JZ EXIT0 ;显现输入错误就直接返回D0S CALL FINDMIN LEA DX,RESULT CALL SHOW MOV AH,02H MOV D

26、L,MIN;将最小数地高位数赋给 DL,加上 30H 输出 ADD DL,30H INT 21H MOV AH,02H MOV DL,MIN1;将最小数地低位数赋给 DL,加上 30H 输出ADD DL,30H INT 21H EXIT0:MOV AX,4C00H INT 21H MAIN ENDP ;显示字符串子程序SHOW PROC PUSH AX MOV AH,09H INT 21H POP AX RET SHOW ENDP ;复原参数爱护现场;从键盘猎取输入子程序GETNUM PROC PUSH AX PUSH BX PUSH CX PUSH DX PUSH DI MOV DI,0 M

27、OV CX,0 名师归纳总结 NEXT: MOV AH,1 ;调用 DOS命令输入单个字符第 17 页,共 37 页- - - - - - -精选学习资料 - - - - - - - - - INT 21H CMP AL,0DH ;判定是否是回车符,假如是回车就终止猎取JZ EXIT CMP CX,0 JZ LOOP1 CMP CX,1 JZ LOOP2 CMP CX,2 JZ LOOP3 LOOP1: CMP AL,20H ;比较当前输入地是否是空格,假如是直接忽视 JZ CUOWU3 JMP GET LOOP2: CMP AL,20H ;当前已经输入了一位,假如再输入空格,就出错JZ CU

28、OWU2 JMP GET LOOP3: CMP AL,20H JNE CUOWU4 错;假如当前已经输入了两位数,却没有输入空格,就出XOR CX,CX ;假如当前已经输入了两位数并输入了空格,就将CX清JMP NEXT ;进入下一次读取键盘操作GET: SUB AL,30H ;将读入地字符减去30H JL CUOWU1 ;比较输入地数是否超出界限CMP AL,9 JG CUOWU1 MOV NUMDI,AL INC COUNT INC CX INC DI JMP NEXT CUOWU1: MOV SIG,1 MOV DX,OFFSET ERROR1 CALL SHOW JMP RETURN

29、CUOWU2: MOV SIG,1 MOV DX,OFFSET ERROR2 CALL SHOW JMP RETURN CUOWU3: MOV SIG,1 MOV DX,OFFSET ERROR3 CALL SHOW JMP RETURN CUOWU4: MOV SIG,1 MOV DX,OFFSET ERROR4 CALL SHOW 名师归纳总结 - - - - - - -第 18 页,共 37 页精选学习资料 - - - - - - - - - JMP RETURN EXIT: MOV BL,COUNT CMP BL,0 JZ CUOWU3 ;假如输入地数字个数为0,就是第三种错误AND

30、BL,01H ;输入地数字是否是两位数CMP BL,0 JNZ CUOWU2 ;输入地数字不是两位地时候,是其次种错误 RETURN: POP DI POP DX POP CX POP BX POP AX RET GETNUM ENDP ;查找最小数地子程序 FINDMIN PROC PUSH DI PUSH AX PUSH CX MOV DI,-2 MOV CL,COUNT MOV AL,CL CBW MOV CX,AX LOOPA: ADD DI,2 CMP CX,DI JZ JIESHU MOV AH,NUMDI MOV AL,NUMDI+1 CMP AH,MIN ;假如十位数比暂时地最

31、小数地高位大不转变 JA LOOPA min JZ HIGH1 ;假如十位数相等就进入个位数比较BIANHUA:MOV MIN,AH ;转变最小数MOV MIN1,AL JMP LOOPA ;连续比较下一个数 HIGH1: CMP AL,MIN1 JNB LOOPA ;比较个位数 JMP BIANHUA JIESHU: POP CX POP AX POP DI RET FINDMIN ENDP 名师归纳总结 - - - - - - -第 19 页,共 37 页精选学习资料 - - - - - - - - - CODE ENDS END MAIN 用了子程序调用地方法,大大缩短了代码地长度和复用

32、度,写了四个PROC,主过程,显示字符串地子程序,从键盘猎取输入地子程序和求最小数地 子程序 .规定了每个两位数之间用空格隔开,终止符定位空格键,规定了四种错误:(1)输入数字无效,即输入地一位数字比0 小,或者比 9 大. (2)输入地数字不是两位地,即输入一位数之后就输入空格键了 . (3)输入地数字为空,即直接按下了空格键 . (4)两个两位数之间没有用空格隔开 . 本程序比较数字大小是直接用 ASCII码比较地,先将输入地减去 30H,再两位分开比较,先比较十位,假如当前数字地十位ASCII比当前最小数大,就比较下一个两位数 .假如小于,就用该两位数代替当前地最小数 .假如等于,就连续

33、比较各位地 ASCII码地大小 .显现错误地时候调用 SHOW子程序,提示输入地错误类型.正确输入地时候,输出了最小数为 014:一下是四种输入错误地截图:名师归纳总结 - - - - - - -第 20 页,共 37 页精选学习资料 - - - - - - - - - 六、试验总结通过本次试验,我把握了ASCII码和十进制数之间地转换;熟识了子程序地编写及调用 .子程序大大缩短了代码地长度和冗余度,不仅更加美观,也使规律更加 清楚 .同时输入检错这一部分让我感受到了规律摸索严密地重要性,一不当心就 会出错,做试验严谨地态度显得特别重要 .再者就是懂得键盘输入进地是ASCII码,而比较地时候可

34、以分成十位,个位分别比较,需要先减去30H.而输出地时候需要再把30H 加上,分十位和个位输出才是对地 .硬件编程和软件编程地差别在本次试验里更加表达出来了,假如光用软件编程地思想去掌握硬件编程会显现许多古怪地错误.像开头地时候,我就没有想到在硬件程序里比较两个数可以十位个位分开比较,而是把 ASCII转换成十进制比较,再转回来输出,这样很麻烦,而且简洁出错.所以联系硬件实际情形和运算器内部运行原理来想编程地思路,才是硬件编程正确地方向 .试验四子程序设计一.试验目地 : 1.进一步把握子程序设计方法; 2.进一步把握基本地 DOS 功能调用 . 二.试验内容 :名师归纳总结 - - - -

35、- - -第 21 页,共 37 页精选学习资料 - - - - - - - - - 1.从键盘上输入某班同学地某科目成果.输入按同学地学号由小到大地次序输入. 2.统计检查每个同学地名次 . 3.将统计结果在屏幕上显示 . 4.为便于观看 ,输入同学数目不宜太多 ,以不超过一屏为宜 .输出应便于阅读 .尽可能考虑美观 . 5.输入要有检错手段 . 三.预习题 : 1.如何确定一个同学在这门科目中地名次 . 答:有如下两种思路:(1)抽取每个同学地成果和其他全部同学地成果进行比较,然后统计比其分数高地同学,得出该同学地名次;(2)冒泡法,将同学依据输入地成果进行一次排序,成果高地交换到前面,成

36、果低地交换到后面,此时同学地次序即为同学地名次 . 2.你觉得输入终止后 ,采纳什么方法进行比较以得到同学地名次最为简洁 . 答:冒泡法 .每次比较相邻地两个数据,大地放在前面,这样一轮以后,最小值就移到了数据表地末尾,再次冒泡以此类推.其实这里地 “冒泡排序 ”是倒着地冒泡排序,由于结果是将最高分排到了开头但是基本思想是一样 地.3.预备好模块层次主程序输入检查子程序冒泡排序子程序输入子程序图. 4.给出输出显示地势式 . 名师归纳总结 - - - - - - -第 22 页,共 37 页精选学习资料 - - - - - - - - - 答:名次 学号 成果四、程序设计流程图初始化数据段和寄

37、 存器输出信息提示用户 输入输入成果否检验子程序 调用检验子程序检查输入是否 合理是调用冒泡排序子程 序调用输出子程序冒泡排序子程序调用输出子程序终止程序名师归纳总结 - - - - - - -第 23 页,共 37 页精选学习资料 - - - - - - - - - 五、程序源代码及说明PRINT MACRO X PUSH DX MOV DL,X MOV AH,2 INT 21H POP DX ENDM ;打印字符地宏;回车空格子程序 ENTER MACRO MOV DL,0DH MOV AH,02H INT 21H MOV DL,0AH MOV AH,02H INT 21H ENDM DA

38、TA SEGMENT BUFFER DB 100 DB . DB 100 DUP . STR1 DB Please input the score of the students:,0DH,0AH,$ STR2 DB Error,please input the score again:,0DH,0AH,$ VAR1 DW . VAR2 DW . CK DB . TAB DB 100 DUP. DATA ENDS STACK SEGMENT STACK stack DB 100 DUP . STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:ST

39、ACK STA PROC FAR 名师归纳总结 - - - - - - -第 24 页,共 37 页精选学习资料 - - - - - - - - - PUSH DS XOR AX,AX PUSH AX MOV AX,DATA MOV DS,AX LEA DX,STR1 MOV AH,09H ;显示字符串,输出提示输入 INT 21H INPUT:LEA DX,BUFFER ;10 号功能调用,输入字符串 MOV AH,0AH INT 21H LEA DI,TAB XOR CX,CX MOV AH,30H ;赋学号第一位地 MOV DH,31H LEA BX,BUFFER+2 AscII码 CALL CHECK CMP CK,1 ;如 CK=1,就数据不合格 JZ INPUT CALL SORT ENTER CALL DISPY RET STA ENDP ;检验输入是否合法地子程序CHECK PROC NEXT1: MOV CK,0 MOV DI,AH ;将学号第一位地 INC DI MOV DI,DH ;将学号其次位地AscII码存入指定内存区域 As

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 高考资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁