文档详情

汇编十六进制输出.doc

发布:2017-01-02约5.45千字共5页下载文档
文本预览下载声明
用十六进制数形式显示 实验目的 1、8086指令:JG、SHR、MOV、OR、CMP、INC、LEA、INT、JNZ等。 2、用DOS功能调用1号功能多次进行键盘输入的方法 2、用DOS功能调用2号功能单字符或9号功能字符串显示的方法。 实验内容 1、编一个程序,要求把NUM单元存放的一个8位二进制数,在屏幕上显示成16进制数。 2、修改前述1的程序,使能从键盘输入8位二进制数,存入NUM单元,并在屏幕上显示对应的16进制数。 3、对有余力的同学进一步完成:编一个程序,要求把键盘输入的任意一个至多16位二进制数(以回车为输入结束),在屏幕上显示成对应的十六进制数。 实验结果: 对1:如NUM单元的内容为,要求能显示“RESULT=4BH”。 对2:如键盘输入8位二进制输入8位就自动停止),接着屏幕显示“RESULT=4BH”。 对3:如键盘输入10110101110101(回车) 输出结果:RESULT=2D75H 调试及分析 关于给定的16位二进制数和给定的8位二进制数之间的区别,我写了2个程序。定义的时候,DB是8位,DW是16位。要存入的时候,用BX存入16位,用DL存入8位的。如果非要用BX存入8位的,则需要强制类型转换 WORD PTR。 程序的核心是把字符(输入的或者给定的)转换为数字。这在C++中做过,所以能知道减去48D(30H)就可以了。然后二进制与十六进制之间的转换是4位二进制数转换为一位十六进制的数。左移四位,就好了。8位数的时候,循环2次;16位的时候,循环4次。 键盘输入少于16位的二进制数时,是一位一位地输入的,每次输入一个新的数时,前面所得的结果左移一位,也就是乘以2。后面的输出与前面一样。 还有一个小问题,在输入输出的时候,输入一个多位二进制的时候,输出结果的位数如果比输入的位数少的话,会出现保留多余的输入。也就是输出是粘帖在输入上面的,没有覆盖的部分会依然在屏幕上。我试了许多次,以为是程序有错。后来试了加了在输出数据前输出回车,才解决问题。 总结 编程就是需要多练习。有很多小错误,花了很长时间才找出来。这是因为不熟悉这么语言的原因。 五、代码 代码1: ;把给定的8位2进制数转换为16进制输出 DATAS SEGMENT NUM DB MESS DB RESULT=$ STR2 DB 4 DUP(?) DATAS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS START: MOV AX,DATAS MOV DS,AX MOV AH, 9 MOV DX, SEG MESS ; DS:DX=串地址,SEG mess是取mess段地址的运算 MOV DS, DX MOV DX, OFFSET MESS ; OFFSET mess是取mess偏移地址的运算 INT 21H MOV BL,NUM ;WORD PRT[NUM] MOV CH,2 ;循环次数 LM: MOV CL,4 ROL BL,CL MOV DL,BL AND DL,0FH ADD DL,30H CMP DL,3AH JB NEXT ADD DL,7 NEXT: MOV AH,2 INT 21H DEC CH JNZ LM
显示全部
相似文档