logo资料库

华工微机与接口实验代码及调试过程.docx

第1页 / 共25页
第2页 / 共25页
第3页 / 共25页
第4页 / 共25页
第5页 / 共25页
第6页 / 共25页
第7页 / 共25页
第8页 / 共25页
资料共25页,剩余部分请下载后查看
实验二 数码转码编程及程序调试
微机实验三 分支和循环程序设计实验
实验二 数码转码编程及程序调试 第一题将 ASCII 码表示的十进制数转换为二进制数 【代码如下】 ;实验二第一题 将 ASCII 码表示的十进制数转换为二进制数 DATA SEGMENT DB 30 DUP(?) DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV SI,3500H MOV DI,3510H MOV BX,0AH MOV CX,0004H MOV AH,00H MOV AL,[SI] SUB AL,0030H LOOP: MUL BX INC SI ADD AL,[SI] SUB AL,0030H DEC CX JNZ LOOP MOV [DI],AX JMP QUIT QUIT: MOV AH,004CH INT 21H CODE ENDS END START ;定一源地址 ;定义目标地址 ;给 BX 赋值 10 便于后面相乘 ;赋给 CX 要装换的位数 ;将 AH 清零 ;转换结束跳出循环 【调试结果】 输入 30 30 30 31 35 时,输出为 0015H
输入 30 30 30 30 36 时,输出为 0006H 调试结果证明程序正确 2、将从键盘输入的五位十进制数的 ASCII 码已存在 3500 起始的内存单元中。把 它转换成 BCD 码后,再按位分别存入 350A 起始的内存单元内。若输入的不是 十进制的 ASCII 码,则显示 FF. 【代码如下】 ;实验二 第二小题 DATA SEGMENT DB 30 DUP(?) ENDS SEGMENT ASSUME CS:CODE,DS:DATA DATA CODE START: MOV CX,0005H MOV SI,3500H ;循环次数设置为 5 ;源地址设置为 3500H
MOV DI,3510H ;目的地址设置为 3510H L1: MOV DL,0FFH ;给 DL 赋值 0FFH,便于后面 输入错误是赋给[DI]值 FF,但不能直接给[DI]赋值 0FFH,会溢出 ;判断大于 9 则赋值 FF ;判断小于 0 则赋值 FF ;转换为 BCD 码 MOV AL,[SI] CMP AL,0039H JG ERROR CMP AL,0030H JB ERROR SUB AL,30H MOV [DI],BYTE PTR AL INC SI INC DI DEC CX JNZ L1 JMP QUIT L2: ERROR: MOV [DI],DL ;赋值 FFH JMP L2 QUIT: MOV AX,4C00H INT 21H CODE ENDS END START 【调试结果】 输入为 23 34 38 47 32 时
当输入为 12 34 38 54 71 时 5、BCD 码转换为二进制码 【代码如下】 ;第二次试验第五题 ;BCD 码转换为二进制码 DATA SEGMENT DB 30 DUP(?) DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: AGAIN: MOV CX,08H MOV SI,3500H MOV DI,3510H 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 DEC CX JNZ AGAIN JMP QUIT 切记 ;初始化 ;此处记得将 SI 增加 1,否则会多 4 个数字 ,
QUIT: MOV AX,4C00H INT 21H CODE ENDS END START 【调试结果】 3、 将十六位二进制数转换为 ASCII 码表示的十进制数。 【代码如下】 ;第二次试验 第三题 ;十六位二进制数转换为 ASCII 码表示的十进制数 DATA SEGMENT DB 30 DUP(?) DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: AGAIN: MOV DI,3500H MOV AX,[DI] MOV SI,3514H INC SI DEC SI MOV DX,0000H MOV BX,000AH DIV BX ADD DL,30H MOV [SI],DL ;错误理解二进制 存到 AX 的意思 ;此处被除数必须为寄存器
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 MOV AX,004CH INT 21H QUIT: CODE ENDS END START 【调试结果】 4、 十六进制数转换为 ASCII 码 【代码如下】 ;第二次实验第四题 ; 十六进制数转换为 ASCII 码 DATA SEGMENT DB 30 DUP(?) DATA ENDS
;初始化过程 ;小于 9 则直接装换为 ACSSII 码 ;大于 9 则加 37 ;存储结果至[DI]所在单元 ;为了后面用到 CL 作为右移计数用,此处先 STACK SEGMENT STACK 'STACK' DB 30 DUP(?) STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: AGAIN: L1: L2: MOV CX,0004H MOV SI,3500H MOV DI,3510H MOV DX,[SI] MOV AX,DX AND AX,000FH CMP AL,09H JL ADD AL,37H JMP L2 ADD AL,30H L1 MOV [DI],AL INC DI PUSH CX 将 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 ENDS CODE SEGMENT ASSUME CS:CODE START: MOV SI,3500H MOV DI,3510H MOV CX,0006H CLD CMP SI,DI JL L1 JMP L2 L1: ADD SI,CX ADD DI,CX LOOP1: DEC SI DEC DI MOV AL,[SI] MOV [DI],AL DEC CX ;给 SI 附地址 ;DF 置 0 ;比较源数据块和目的块首地址 ;源数据块地址小于目的数据块地址时跳到 L1 ;否则跳到 L2 ;数据搬移
分享到:
收藏