华工微机与接口实验代码及调试过程.doc_第1页
华工微机与接口实验代码及调试过程.doc_第2页
华工微机与接口实验代码及调试过程.doc_第3页
华工微机与接口实验代码及调试过程.doc_第4页
华工微机与接口实验代码及调试过程.doc_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验二 数码转码编程及程序调试第一题将ASCII码表示的十进制数转换为二进制数【代码如下】;实验二第一题 将ASCII码表示的十进制数转换为二进制数DATA SEGMENT DB 30 DUP(?)DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOV SI,3500H ;定一源地址 MOV DI,3510H ;定义目标地址 MOV BX,0AH ;给BX赋值10便于后面相乘 MOV CX,0004H ;赋给CX要装换的位数 MOV AH,00H ;将AH 清零 MOV AL,SI SUB AL,0030HLOOP: MUL BX INC SI ADD AL,SI SUB AL,0030H DEC CX JNZ LOOP ;转换结束跳出循环 MOV DI,AX JMP QUITQUIT: MOV AH,004CH INT 21HCODE ENDS END START 【调试结果】输入30 30 30 31 35时,输出为0015H输入30 30 30 30 36时,输出为0006H调试结果证明程序正确2、 将从键盘输入的五位十进制数的ASCII码已存在3500起始的内存单元中。把它转换成BCD码后,再按位分别存入350A起始的内存单元内。若输入的不是十进制的ASCII码,则显示FF.【代码如下】;实验二 第二小题DATA SEGMENT DB 30 DUP(?)DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOV CX,0005H ;循环次数设置为5 MOV SI,3500H ;源地址设置为3500H MOV DI,3510H ;目的地址设置为3510H L1: MOV DL,0FFH;给DL赋值0FFH,便于后面 输入错误是赋给DI值FF,但不能直接给DI赋值0FFH,会溢出 MOV AL,SI CMP AL,0039H ;判断大于9则赋值FF JG ERROR CMP AL,0030H ;判断小于0则赋值FF JB ERROR SUB AL,30H ;转换为BCD码 MOV DI,BYTE PTR ALL2: INC SI INC DI DEC CX JNZ L1 JMP QUITERROR: MOV DI,DL ;赋值FFH JMP L2QUIT: MOV AX,4C00H INT 21HCODE ENDS END START【调试结果】输入为 23 34 38 47 32时当输入为12 34 38 54 71时5、BCD码转换为二进制码【代码如下】;第二次试验第五题;BCD码转换为二进制码DATA SEGMENT DB 30 DUP(?)DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOV CX,08H ;初始化 MOV SI,3500H MOV DI,3510HAGAIN: MOV AL,SI MOV BL,0AH MUL BL INC SI MOV AH,00H MOV DL,SI ADD AL,DL MOV DI,AX INC DI INC SI ;此处记得将SI增加1,否则会多4个数字 ,切记 DEC CX JNZ AGAIN JMP QUIT QUIT: MOV AX,4C00H INT 21HCODE ENDS END START【调试结果】3、 将十六位二进制数转换为ASCII码表示的十进制数。【代码如下】;第二次试验 第三题;十六位二进制数转换为ASCII码表示的十进制数DATA SEGMENT DB 30 DUP(?)DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOV DI,3500H MOV AX,DI ;错误理解二进制 存到AX的意思 MOV SI,3514H INC SI AGAIN: DEC SI MOV DX,0000H MOV BX,000AH DIV BX ;此处被除数必须为寄存器 ADD DL,30H MOV SI,DL CMP AX,0H ;判断商是否为0,不是就重复,是就比较SI是不是等于3500,是就退出 JNZ AGAIN CMP SI,3500 JE QUIT AGAIN1: DEC SI MOV DL,30H MOV SI,DL CMP SI,3510H JNZ AGAIN1 QUIT: MOV AX,004CH INT 21HCODE ENDS END START 【调试结果】4、 十六进制数转换为ASCII码【代码如下】;第二次实验第四题; 十六进制数转换为ASCII码DATA SEGMENT DB 30 DUP(?)DATA ENDSSTACK SEGMENT STACK STACK DB 30 DUP(?)STACK ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOV CX,0004H ;初始化过程 MOV SI,3500H MOV DI,3510H MOV DX,SI AGAIN: MOV AX,DX AND AX,000FH ;小于9则直接装换为ACSSII码 CMP AL,09H JL L1 ADD AL,37H ;大于9则加37 JMP L2L1: ADD AL,30HL2: MOV DI,AL ;存储结果至DI所在单元 INC DI PUSH CX ;为了后面用到CL作为右移计数用,此处先将CX压栈 MOV CL,04H SHR DX,CL POP CX DEC CX JNZ AGAIN JMP QUIT QUIT: MOV AX,4C00H INT 21H CODE ENDS END START 【调试结果】微机实验三 分支和循环程序设计实验实验1【代码如下】;实验三(1)STACK SEGMENT STACK DW 64 DUP(?) STACK ENDSCODE SEGMENTASSUME CS:CODESTART: MOV SI,3500H ;给SI附地址 MOV DI,3510H MOV CX,0006H CLD ;DF置0 CMP SI,DI ;比较源数据块和目的块首地址 JL L1 ;源数据块地址小于目的数据块地址时跳到L1 JMP L2 ;否则跳到L2 L1: ADD SI,CX ADD DI,CXLOOP1: DEC SI DEC DI MOV AL,SI ;数据搬移 MOV DI,AL DEC CX JNZ LOOP1 ;循环直到搬移字节数达到CX停止 JMP QUIT ;搬移结束跳到 quit 退出 L2: MOV AL,SI MOV DI,AL INC SI INC DI DEC CX JNZ L2QUIT: MOV AX,4C00H INT 21H CODE ENDS END START 【调试过程】此时源数据块地址为 3500H,目的数据块地址为 3510H,结果如下,此时不会出现重叠覆盖现象若将源数据块地址改为3510H,目的数据块地址改为3500H同样能实现数据搬移若将源数据块地址改为 3500H,目的数据块地址改为 3503H,则在3503H开始会出现覆盖重叠现象二、循环程序设计实验【代码如下】;实验二、循环程序设计实验DATA SEGMENT D1 DW 100 DUP(?)DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV DX,0001H ;初始化 DX MOV BL,0002H ;初始化 BL MOV SI,3500H ;将SI 指向 3500H L1: MOV AL,BL INC BL MUL BL ADD DX,AX CMP AX,00C8H ;判断 AX 是否大于 200 JL L1 ;AX小于 200 则继续循环 QUIT: ;AX 大于200则退出 MOV SI,DX MOV AX,4C00H INT 21H CODE ENDS END START 【实验结果】计算结果为 45FH ,计算正确。三、求某个数据区内负数的个数【代码如下】;三、 求某个数据区内负数的个数DATA SEGMENT DW 100 DUP(?)DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV DI,3530H ;将数据区首地址指向3530H MOV AH,1 INT 21H ;从键盘输入存放数据个数,并显示在屏幕上 SUB AL,0030H ;将输入值减去30 MOV CL,AL MOV DI,CL INC DI MOV CH,00H ;CH清0 MOV BL,00H ;BL清0 L1: TEST BYTE PTRDI,80H ;用TEST判断输入数据首位是否为1 JZ NEXT INC BL ;首位为1则跳到 NEXT 并将 BL 加1NEXT: INC DI ;DI 地址加1 DEC CX JNZ L1 ; CX 若不为0,则继续跳到 L1 JMP QUIT ; 若 CX 为0,则跳到 QUIT 准备退出QUIT: MOV DI,BL ;将 BL 中的计数值赋值给 DI 所在地址单元并退出 MOV AH,004CH INT 21HENDS CODE END START【调试结果】实验四子程序设计【代码如下】;实验四子程序设计;main 函数DATA SEGMENT STRING DB 200 DB 0 DB 50 DUP(?);定义BUF CR EQU 0DH LF EQU 0AH CRLF DB 0DH,0AH,$ MES DB PLEASE INPUT THE NUMBER 05.,CR,LF MES1 DB 1. Input an string.Then convert the small letter to big letter.,CR,LF MES2 DB 2. Find the character whose ASCII code is biggest.,CR,LF MES3 DB 3. Sort the character by ASCII code by decreasing order.,CR,LF MES4 DB 4. Display the ticking time.,CR,LF MES5 DB 5. End the program.,CR,LF,$ MES6 DB You hace choosen function 1 ,please input a string. ,CR,LF,$ MES7 DB CR,LF,$ MES8 DB Press any key to do again or press ESC to return to main menu.,CR,LF,$ MES9 DB The string after change is:,CR,LF,$ MES10 DB The greast number is:,CR,LF,$ MES21 DB You hace choosen function 4 ,CR,LF MES11 DB Please input the time like xx:xx:xx :,CR,LF,$ MES12 DB Sorry,you are fail to set time,please reset it aggain!,CR,LF,$ MES13 DB Sorry,you have choosen an undefine function,please choose again!,CR,LF,$ MES14 DB You hace choosen function 2 ,please input a string. ,CR,LF,$ MES15 DB You hace choosen function 3 ,please input a string. ,CR,LF,$ MES16 DB You have exit the system,welcome to use it again!,CR,LF,CR,LF MES17 DB make by XXXXXX,CR,LF MES18 DB in class XXXXXX,CR,LF MES19 DB at 2013,06,02,CR,LF,$ MES20 DB The string after sort are show as follows:,CR,LF,$ FLAG DB -1 ;冒泡排序中的判断标志DATA ENDSSTACK SEGMENT STACK STACKSTT DB 100 DUP(?)STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKMAIN PROC NEARSTART: MOV AX,DATA MOV DS,AX MOV DX,OFFSET MES MOV AH,9 INT 21H MOV AH,01H ; 输入选择 INT 21H PUSH AX ;保护现场以便输出回车换行,使界面友好 LEA DX,CRLF MOV AH,09H INT 21H POP AX ;恢复现场,比较输入值确定选择功能 CMP AL,1 JE FUN1 CMP AL,2 JE FUN2 CMP AL,3 JE FUN3 CMP AL,4 JE FUN4 CMP AL,5 JE FUN5 LEA DX,MES13 MOV AH,09H INT 21H JMP STARTFUN1: CALL PROC1 MOV DX,OFFSET MES8 MOV AH,09H INT 21H MOV AH,07H INT 21H CMP AL,27 ;判断输入的是否为ESC JNE FUN1 ;如果不是就继续执行 JMP STARTFUN2: CALL PROC2 MOV DX,OFFSET MES8 MOV AH,09H INT 21H MOV AH,07H INT 21H CMP AL,27 ;判断输入的是否为ESC JNE FUN2 ;如果不是就继续执行 JMP STARTFUN3: CALL PROC3 MOV DX,OFFSET MES8 MOV AH,09H INT 21H MOV AH,07H INT 21H CMP AL,27 ;判断输入的是否为ESC JNE FUN3 ;如果不是就继续执行 JMP STARTFUN4: LEA DX,MES21 MOV AH,09H INT 21H CALL PROC4 MOV DX,OFFSET MES8 MOV AH,09H INT 21H MOV AH,07H INT 21H CMP AL,27 ;判断输入的是否为ESC JNE FUN4 ;如果不是就继续执行 JMP STARTFUN5: LEA DX,MES16 MOV AH,09H INT 21H MOV AX,4C00H ;如果是就退出系统 INT 21H ;DOS调用 ; 子程序一、 按1键完成字符串小写字母变大写字母PROC1 PROC NEAR PUSH AX PUSH CX PUSH DX PUSH SI MOV AX,DATA MOV DS,AX MOV DX,OFFSET MES6 MOV AH,09H ;输出请输入字符串的信息 INT 21H LEA DX,STRING MOV AH, 0AH ;不在DATA区中定义BUF则默认输入到 BUF中 INT 21H LEA DX,CRLF MOV AH,09H INT 21H ;回车换行 LEA DX,MES9 MOV AH,09H INT 21H LEA SI,STRING+2 MOV CL,STRING+1 ; 获取字符串中字符个数 MOV CH,0CHANGE: MOV DL,SI CMP DL,a JB NEXT CMP DL,z JA NEXT ;ASCII码小于a,大于z的不用进行转换 SUB DL,20H ;减去32装换为大写字母NEXT: MOV AH,02H INT 21H INC SI DEC CX JNE CHANGE MOV DX,OFFSET CRLF MOV AH,09H INT 21H POP SI POP DX POP CX POP AX RETPROC1 ENDP;子程序二,找出输入字符串中ACSII码值最大的数并输出PROC2 PROC NEAR PUSH AX PUSH CX PUSH DX ;保护现场 PUSH SI MOV AX,DATA MOV DS,AX MOV DX,OFFSET MES14 MOV AH,09H ;输出请输入字符串的信息 INT 21H LEA DX,STRING MOV AH,0AH INT 21H MOV SI,DX ;获取第一个字符串 INC SI MOV CL,SI ;获取字符串的个数 MOV CH,00H MOV DH,00H INC SI MOV AL,SICOMP: INC SI CMP AL,SI ;判断,取出最大的值放到DL中 JG NEXT2 MOV AL,SINEXT2: LOOP COMP PUSH AX MOV DX,OFFSET CRLF MOV AH,09H INT 21H MOV DX,OFFSET MES10 MOV AH,09H INT 21H MOV DX,OFFSET CRLF MOV AH,09H INT 21H POP AX MOV DL,AL MOV AH,02H INT 21H MOV DX,OFFSET CRLF MOV AH,09H INT 21H POP SI POP DX ;恢复现场 POP CX POP AX RETPROC2 ENDP;子程序三,对输入的字符串进行冒泡排序并输出PROC3 PROC NEAR PUSH AX PUSH BX PUSH CX PUSH DX ;保护现场 PUSH SI PUSH DI MOV AX,DATA MOV DS,AX MOV DX,OFFSET MES15 MOV AH,09H ;输出请输入字符串的信息 INT 21H LEA DX,STRING MOV AH,0AH INT 21H MOV SI,DX INC SI ;获取第一个字符串 MOV CL,SI ;获取字符串的个数 MOV BL,SI ;外层循环计数 MOV CH,00H MOV DH,00H MOV BH,00H INC SI MOV DI,SIL1: CMP FLAG,0 JE L3 DEC BX CMP BX,0 JE L3 MOV CX,BX MOV SI,DI MOV FLAG,0L2: MOV AL,SI CMP AL,SI+1 JLE NEXT3 ;前后转换 XCHG AL,SI+1 MOV SI,AL MOV FLAG,0FFHNEXT3: INC SI DEC CX JNZ L2 ;一直内循环 JMP L1 ;退出内循环L3: DEC DI ;重设循环次数 MOV CL,DI MOV CH,00H PUSH DX ;保护现场输出回车换行,防止输出信息重叠,美化界面 PUSH AX LEA DX,MES20 ;输出 输出提示语句 MOV AH,09H INT 21H LEA DX,CRLF MOV AH,09H INT 21H POP DX ;恢复现场 POP AXL4: INC DI MOV DL,DI ;输出排序后的语句 MOV AH,02H INT 21H DEC CX JNZ L4 LEA DX,CRLF MOV AH,09H INT 21H POP AX POP BX POP CX POP DX POP SI POP DI RETPROC3 ENDP;子程序四,动态显示时间PROC4 PROC NEAR PUSH AX PUSH BX PUSH CX PUSH DX CALL CATT MOV CH,AL MOV AH,01H INT 21H CALL CATT MOV CL,AL MOV AH,01H INT 21H CALL CATT MOV DH,AL MOV DL,0 LEA DX,CRLF MOV AH,09H INT 21H MOV AH,2DH ;调用DOS中断设置时间 INT 21H CMP AL,0FFH JE ERRPRT: PUSH DX MOV AL,CH MOV AH,0 MOV BL,0AH DIV BL ADD AL,30H ADD AH,30H MOV DL,AL MOV DH,AH MOV AH,02H INT 21H MOV DL,DH INT 21H MOV DL,3AH INT 21H MOV AL,CL MOV AH,0 DIV BL ADD AL,30H ADD AH,30H MOV DL,AL MOV DH,AH MOV AH,02H INT 21H MOV DL,DH INT 21H MOV DL,3AH IN

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论