信工实验参考——《微机实验3》

 一般来说,我贴上来的代码都是能直接跑的,如果不行可以邮箱交流1902946954@qq.com

仅供参考,微机的老师讲的很好,所以请还是要先自己完成咯。
免责声明,本人菜只因一只,内容仅供参考,错了不负责哈。

微机实验三

一、实验目的

1、熟悉80X86基本指令集。

2、掌握汇编语言源程序的编写方法:程序结构、返回DOS的方法、段地址的初始化、存储单元的访问等。

3、掌握常用的代码转换编程。

4、掌握汇编程序的DEBUG动态调试。

二、开发环境

汇编集成开发环境、debug

三、实验题目

实验1:码制转换:将字节数据转换为ASCII码表示的二进制数,并显示输出。字节数据的值域为0~255,可转换为八位二进制数。例如:字节数据为79h,则转换为:‘01111001’

1.源代码:

datas segment
  org  2000h
  num  db	79H
  org  2010h
  res  db    8 dup(?),'$'           
  datas  ends

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS
START:
    MOV AX,DATAS
    MOV DS,AX
    ;代码段
    MOV BL,[num]		;将数据移入寄存器
    MOV CL,8			;左移次数为8次
    MOV BH,00000001B		;清除高七位
    MOV SI,0				;res的偏移
AGAIN:
	ROL BL,1			;循环左移
	MOV CH,BL			;保护BL
	AND CH,BH			;清空高七位
	MOV AL,30H			;转换为ASCII码
	ADD AL,CH			
	MOV res[SI],AL		;移入存储单元
	INC SI
	DEC CL
	JNE AGAIN

	MOV AX,SEG res		;屏幕显示字符串
	MOV DS,AX
	MOV DX,OFFSET res
	MOV AH,9
	INT 21H
    
    MOV AH,4CH
    INT 21H
CODES ENDS
    END START

2.运行截图

测试成功

3.修改数据段,再次测试

在数据段中放56H,测试

测试成功

实验二:码制转换:将字数据转换为ASCII码表示的十进制数,并显示输出。字数据的值域为0~65535,最多可转换为五位十进制数。例如:字数据为0ffffh,则转换为:‘65535’

1.源代码

datas segment
  org  2000h
  num  dw    65535
  org  2010h
  res  db    5 dup(?),'$'           
  datas  ends

STACKS SEGMENT
    ;此处输入堆栈段代码
STACKS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,DATAS
    MOV DS,AX
    ;此处输入代码段代码
    
    MOV SI,0
    MOV AX,[num]
    MOV CX,10000
    DIV CX;AX为6,DX为5535
    ADD AX,30H;转为ASCII码
    XCHG AX,DX;互换
    MOV res[SI],DL
    INC SI;得6
    
    SUB DX,DX
    MOV CX,1000
    DIV CX
    ADD AX,30H
    XCHG AX,DX
    MOV RES[SI],DL
    INC SI;得5
    
    MOV CL,100
    DIV CL;此时已经是字节运算,商在AL,余数在AH
    ADD AL,30H
    XCHG AL,AH
    MOV RES[SI],AH
    INC SI
    
    MOV AH,0
    MOV CL,10
    DIV CL
 	ADD AL,30H		;不用再除了,所以直接把AL放十位AH放个位
 	ADD AH,30H
    MOV RES[SI],AL
    INC SI
    MOV RES[SI],AH
    
    MOV AX,SEG res		;屏幕显示
    MOV DS,AX
    MOV DX, OFFSET res
    MOV AH,9
    INT 21H
    
    MOV AH,4CH
    INT 21H
CODES ENDS
    END START

2.运行截图

测试成功

3.修改数据再次测试

在数据段放入00256

测试成功

实验三:码制转换:将字数据转换为ASCII码表示的十六进制数,并显示输出。字数据的值域为0~65535,最多可转换为四位十六进制数。例如:字数据为0ffffh,则转换为:‘FFFF’

1.源代码

data segment
  org  2000h
  num  dw    54A8h
  org  2010h
  res  db    4 dup(?),'$'           
data  ends

CODES SEGMENT
    ASSUME CS:CODES,DS:data
START:
    MOV AX,data
    MOV DS,AX
    ;此处输入代码段代码
    
    MOV BX,[num]		;存储器移入寄存器
	MOV CL,4			;一次移动4位
	MOV SI,0			;偏移标志
	MOV CH,4			;共循环四次
AGAIN:
	ROL BX,CL			;循环左移
	MOV AL,BL			;转到累加器
	AND AL,0FH			;截取低四位
	ADD AL,30H			;转化为ASCII码
	CMP AL,3AH			;判断是否大于9,如是的话要再加7变成字母对应的ASCII码
	JL MOVING
	ADD AL,7H
MOVING:
	MOV RES[SI],AL		;偏移,存入存储器
	INC SI	
	DEC CH
	JNE AGAIN
    
    LEA DX,res       ;显示转换为十六进制后的数据
    MOV AH,09H
    INT 21H
    
    MOV AH,4CH
    INT 21H
CODES ENDS
    END START

 

2.运行截图

测试成功

3.修改数据再次测试

在数据段放入5028H测试

测试成功

  • 6
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值