【汇编程序】十六—十进制转换
单片机汇编进制转换问题,十六进制,十进制,BCD

此属本人原创请尊重知识产权:多字节十六进制转换为十进制(多字节十六进制除十运算)MOV 40H,#0FFH ;三字节数据的低位存放地址MOV 41H,#0FFHMOV 42H,#0FFH ;三字节数据的高位存放地址MOV R0,#50H ;转换后十进制数存放的首地址(个位)MOV R2,#7 ;取十进制的位数减一(如FFFFFFH转换为十进制是16777215,八位减一就是7)CFYS:MOV R1,#40H ;给高字节地址MOV B,#00H ;避免影响下一轮运算SCCF:MOV A,@R1ANL A,#0F0H ;屏蔽低四位ORL A,B ;合并给A(被除数)SWAP AMOV B,#10DIV ABSWAP A ;高位在AXCH A,@R1 ;商高位在ANL A,#0FH ;屏蔽高四位XCH A,BSWAP AORL A,B ;合并给A(被除数)MOV B,#10DIV ABORL A,@R1 ;合并给A(被除数)MOV @R1,AINC R1CJNE R1,#43H,SCCF ;是否完成一次除十运算MOV @R0,BINC R0DJNZ R2,CFYS ;是否完成全部运算MOV @R0,A(以上程序编写于2014/10/03上午)BCD码和十六进制的转换大家都知道汇编语言里把十六进制转换为BCD码用DA指令,但是没有哪条指令能把BCD码转换为16进制,我曾经也很为此困惑,但最终我解决了此问题,看程序!假如R0里储存的是37分钟的BCD码,那么R0里的数是37H,要把它转换成37的十六进制25H存入R1中。
我们现实的算法是37/16=25H就可以得出结果,但是机器没那么聪明,因为37H是十六进制。
汇编程序解决的方法如下:MOV A,R0 ;ANL A,#0FH ;屏蔽高4位(即屏蔽分钟的十位)MOV R2,A ;把个位的值给R2MOV A,R0 ;ANL A,#0F0H ;屏蔽低4位(即屏蔽分钟的个位)SWAP A ;高低字节互换MOV B,#10 ;给B赋值(也可以赋0AH)MUL AB ;A乘B得出十位的十六进制值ADD A,R2 ;十位的值加上个位的值MOV R1,A ;把转换好的十六进制值给R1(以上程序编写于2014/09/13中午)。
东师《汇编语言程序设计16秋在线作业2

B.正确
正确答案:
18.子程序的类型属性只能为NEAR。
A.错误
B.正确
正确答案:
19. DMA方式又叫做直接存储器存取方式。
A.错误
B.正确
正确答案:
20.高级算法语言是计算机硬件能直接识别和执行的语言。
A.错误
B.正确
正确答案:
汇编语言程序设计16秋在线作业2
一、单选题(共10道试题,共30分。)
东北师范大学东师汇编语言程序设计16秋在线作业2
一、单选题(共10道试题,共30分。)
1.调用一个子程序结束之后需返回应该用()指令。
A. Call
B. iret
C. ret
D. iret or ret
正确答案:
2.在实现CASE结构时,除了用分支结构if—else之外还可以用()
A.跳跃表发
B.循环法
正确答案:
8.指令LOOPNZ退出循环的是()
A. CX=0且ZF=1
B. CX=0且ZF=0
C. CX=0或ZF=1
D. CX=0或ZF=0
正确答案:
9. MOV AX,100[SI][BP]的寻址方式()
A.基址变址寻址
B.变址寻址
C.立即寻址
D.寄存器寻址
正确答案:
10.键盘硬中断的中断向量地址为()
A.错误
B.正确
正确答案:
17. RAM中的信息既能读又能写,断电后其中的信息不会丢失。
A.错误
B.正确
正确答案:
18. DMA方式又叫做直接存储器存取方式。
A.错误
B.正确
正确答案:
19.指令cmp 15,BX指令是正确的。
汇编语言程序设计(第四版)【课后答案】

汇编语言程序设计第四版【课后习题答案】第1章汇编语言基础知识〔习题1.1〕简述计算机系统的硬件组成及各部分作用。
〔解答〕CPU:包括运算器、控制器和寄存器组。
运算器执行所有的算术和逻辑运算;控制器负责把指指令逐条从存储器中取出,经译码分析后向机器发出各种控制命令,并正确完成程序所要求的功能;寄存器组为处理单元提供所需要的数据。
存储器:是计算机的记忆部件,它用来存放程序以及程序中所涉及的数据。
外部设备:实现人机交换和机间的通信。
〔习题1.2〕明确下列概念或符号:主存和辅存,RAM和ROM,存储器地址和I/O端口,KB、MB、GB和TB。
〔解答〕主存又称内存是主存储器的简称,主存储器存放当前正在执行的程序和使用的数据,CPU可以直接存取,它由半导体存储器芯片构成其成本高、容量小、但速度快。
辅存是辅助存储器的简称,辅存可用来长期保存大量程序和数据,CPU需要通过I/O接口访问,它由磁盘或光盘构成,其成本低、容量大,但速度慢。
RAM是随机存取存储器的英语简写,由于CPU可以从RAM读信息,也可以向RAM写入信息,所以RAM也被称为读写存储器,RAM型半导体存储器可以按地址随机读写,但这类存储器在断电后不能保存信息;而ROM中的信息只能被读出,不能被修改,ROM型半导体通常只能被读出,但这类存储器断电后能保存信息。
存储器由大量存储单元组成。
为了区别每个单元,我们将它们编号,于是,每个存储单元就有了一个存储地址,I/O接口是由一组寄存器组成,为了区别它们,各个寄存器进行了编号,形成I/O地址,通常称做I/O端口。
KB是千字节、MB是兆字节、GB是吉字节和TB是太字节,它们都是表示存储器存储单元的单位。
〔习题1.3〕什么是汇编语言源程序、汇编程序、目标程序?〔解答〕用汇编语言书写的程序就称为汇编语言源程序;完成汇编工作的程序就是汇编程序;由汇编程序编译通过的程序就是目标程序。
〔习题1.4〕汇编语言与高级语言相比有什么优缺点?〔解答〕汇编语言与高级语言相比的优点:由于汇编语言本质就是机器语言,它可以直接地、有效地控制计算机硬件,因而容易产生运行速度快,指令序列短小的高效目标程序,可以直接控制计算机硬件部件,可以编写在“时间”和“空间”两方面最有效的程序。
IBM-PC汇编语言程序设计答案(第2版)

附录:《IBM—PC汇编语言程序设计》习题参考答案第一章.习题1.1用降幂法和除法将下列十进制数转换为二进制数和十六进制数:(1) 369 (2) 10000 (3) 4095 (4) 32767答:(1) 369=1 0111 0001B=171H(2) 10000=10 0111 0001 0000B=2710H(3) 4095=1111 1111 1111B=FFFH(4) 32767=111 1111 1111 1111B=7FFFH1.2将下列二进制数转换为十六进制数和十进制数:(1) 10 1101 (2) 1000 0000 (3) 1111 1111 1111 1111 (4) 1111 1111答:(1) 10 1101B=2DH=45(2) 1000 0000B=80H=128(3) 1111 1111 1111 1111B=FFFFH=65535(4) 1111 1111B=FFH=2551.3将下列十六进制数转换为二进制数和十进制数:(1) FA (2) 5B (3) FFFE (4) 1234答:(1) FAH=1111 1010B=250(2) 5BH=101 1011B=91(3) FFFEH=1111 1111 1111 1110B=65534(4) 1234H=1 0010 0011 0100B=46601.4完成下列十六进制数的运算,并转换为十进制数进行校核:(1) 3A+B7 (2) 1234+AF (3) ABCD-FE (4) 7AB×6F答:(1) 3A+B7H=F1H=241(2) 1234+AFH=12E3H=4835(3) ABCD-FEH=AACFH=43727(4) 7AB×6FH=35325H=2178931.5下列各数均为十进制数,请用8位二进制补码计算下列各题,并用十六进制数表示其运算结果。
(1) (-85)+76 (2) 85+(-76) (3) 85-76 (4) 85-(-76) (5) (-85)-76 (6) -85-(-76)答:(1) (-85)+76=1010 1011B+0100 1100B=1111 0111B=0F7H;CF=0;OF=0(2) 85+(-76)=0101 0101B+1011 0100B=0000 1001B=09H;CF=1;OF=0(3) 85-76=0101 0101B-0100 1100B=0101 0101B+1011 0100B=0000 1001B=09H;CF=0;OF=0(4) 85-(-76)=0101 0101B-1011 0100B=0101 0101B+0100 1100B=10100001B=0A1H;CF=0;OF=1(5) (-85)-76=1010 1011B-0100 1100B=1010 1011B+1011 0100B=0101 1111B=5FH;CF=0;OF=1(6) -85-(-76)=1010 1011B-1011 0100B=1010 1011B+0100 1100B=11110111B=0F7H;CF=0;OF=0 1.6下列各数为十六进制表示的8位二进制数,请说明当它们分别被看作是用补码表示的带符号数或无符号数时,它们所表示的十进制数是什么?(1) D8 (2) FF答:(1) D8H表示的带符号数为-40,D8H表示的无符号数为216;(2) FFH表示的带符号数为-1,FFH表示的无符号数为255。
十六进制转十进制(汇编masn)

;十六-十进制转换;程序设计的要求:通过键盘给一个四位的16进制数,程序把它转换成10进制数,并显示出来。
;;把输入的4位16进制数以10十进制的值存放到变量num中,注意num可能会有5位数。
所以下面;就通过÷,%(10000,1000,100,10)来得到每一位数,即十进制数.CSEG SEGMENTassume cs:CSEG, ds:DSEG, ss:SSEGMAIN PROC FAR ;主程序入口mov num, 0mov cx, 4 ;输入4位16进制数(这里没有处理少于或多于4位的情况)L1: mov ah, 01hint 21hpush cxmov cl, 4shl num, cl ;输入的数以10进制的形式存到num中pop cxcmp al, 3ahjb s1sub al, 07hs1: sub al, 30hmov ah, 0add num, axmov bx, numloop L1;******************************************************************************;输入空格以结束。
mov ah, 01hint 21hmov ah, 02hmov dl, '('int 21hmov dl, '1'int 21hmov dl, '6'int 21hmov dl, ')'int 21hint 21h0;******************************************************************************;call fun ;调用主函数;******************************************************************************;mov ah, 02hmov dl, '('int 21hmov dl, '1'int 21hmov dl, '0'int 21hmov dl, ')'int 21hcall change;******************************************************************************;call exit ;退出;******************************************************************************; MAIN ENDPfun procmov cx, 10000d ;把除数存放到cx中call dec_divmov cx, 1000dcall dec_divmov cx, 100dcall dec_divmov cx, 10dcall dec_divmov cx, 1dcall dec_divretfun endpdec_div proc ;除法实现,除数为cx的值mov dx, 0div cxmov bx, dxmov dl, aladd dl, 30hmov ah, 02hint 21hretdec_div endp;******************************************************************************* ******************;下面代码仅供测试使用printb procpush axmov dl, almov ah, 02hint 21hpop axretprintb endpprintw procpush axpush bxpush cxMOV cx,4a7: mov di, bxPUSH cxMOV cl,4ROL di,clmov bx, diMOV dl,blAND dl,0fhADD dl,30hCMP dl,3ahJB a8ADD dl,7a8: MOV ah,2INT 21hLOOP a7pop cxpop bxpop axretprintw endp;******************************************************************************* ******************;******************************************************************************* ******************;回车换行change procpush axmov ah, 02hmov dl, 0ahint 21hmov ah, 02hmov dl, 0dhint 21hpop axretchange endp;******************************************************************************* ******************;******************************************************************************* ******************;退出exit proc;按任意键退出mov ah,1int 21hmov ax, 4c00h ;程序结束,返回到操作系统int 21hexit endp;******************************************************************************* ******************SSEG SEGMENT PARA STACK 'stack'dw 100h dup(0) ;初始化堆栈大小为100 SSEG ENDSDSEG SEGMENT;数据段:在此处添加程序所需的数据num dw ?arr dw 10 dup(?)DSEG ENDSEND MAIN。
《汇编语言程序设计》(第四版)教案及答案解析

《汇编语言程序设计》教案附:习题参考答案《汇编语言程序设计》(第4版)钱晓捷主编前言1.汇编语言是计算机能提供给用户的最快而又最有效的语言,也是能够利用计算机所有硬件特性并能直接控制硬件的唯一语言。
2.汇编语言程序设计是高等院校电子计算机硬、软件及应用专业学生必修的核心课程之一。
它不仅是计算机原理、操作系统等其它核心课程的必要先修课,而且对于训练学生掌握程序设计技术、熟悉上机操作和程序调试技术都有重要作用。
3.本教材共有十一章,其内容安排如下:(1).第一、二章为汇编语言所用的基础知识。
(2).第三章详细介绍80x86系列CPU的指令系统和寻址方式。
(3).第四章介绍伪操作、汇编语言程序格式及汇编语言的上机过程。
(4).第五、六章说明循环、分支、子程序结构和程序设计的基本方法。
(5).第七章说明宏汇编、重复汇编及条件汇编的设计方法。
(6).第八章叙述输入/输出程序设计方法,重点说明中断原理、中断过程及中断程序设计方式。
(7).第九章说明BIOS和DOS系统功能调用的使用方法。
(8).第十~十一章分别说明图形显示、发声及磁盘文件存储的程序设计方法,同时提供各种程序设计方法和程序实例。
附:教学参考书1.沈美明、温冬婵编著,IBM–PC汇编语言程序设计(第2版),清华大学出版社,2001年(教材)2.沈美明、温冬婵编著,IBM–PC汇编语言程序设计,清华大学出版社,1991年3.沈美明、温冬婵编著,IBM–PC汇编语言程序设计—例题习题集,清华大学出版社,1991年6月4.沈美明、温冬婵、张赤红编著,IBM–PC汇编语言程序设计—实验教程,清华大学出版社,1992年5.周明德,微型计算机IBM PC/XT(0520系列)系统原理及应用(修订版),清华大学出版社,19916.郑学坚、周斌,微型计算机原理及应用(第二版),清华大学出版社,19957.王士元、吴芝芳,IBM PC/XT[长城0520] 接口技术及其应用,南开大学出版社,19908.杨素行,微型计算机系统原理及应用,清华大学出版社,19959.戴梅萼、史嘉权,微型计算机技术及应用—从16位到32位(第二版),清华大学出版社,199610.张昆藏,IBM PC/XT微型计算机接口技术,清华大学出版社,199111.孟绍光,李维星,高档微机组成原理及接口技术(80386/80486/Pentium),学苑出版社,199312.吴秀清,周荷琴,微型计算机原理与接口技术,中国科学技术大学出版社目录第 1 章基础知识 (1)1.1进位计数制与不同基数的数之间的转换 (1)1.2二进制数和十六进制数的运算 (2)1.3计算机中数和字符的表示 (3)1.4几种基本的逻辑运算 (3)第 2 章 80X86计算机组织 (4)2.180X86微处理器 (4)2.2基于微处理器的计算机系统构成 (4)2.3中央处理机 (5)2.4存储器 (6)2.5外部设备 (7)第 3 章 80X86的指令系统和寻址方式 (8)3.180X86的寻址方式 (8)3.2程序占有的空间和执行时间 (10)3.380X86的指令系统 (10)第 4 章汇编语言程序格式 (27)4.1汇编程序功能 (27)4.2伪操作 (27)4.3汇编语言程序格式 (31)4.4汇编语言程序的上机过程 (34)第 5 章循环与分支程序设计 (37)5.1循环程序设计 (37)5.2分支程序设计 (38)5.3如何在实模式下发挥80386及其后继机型的优势 (38)第 6 章子程序结构 (40)6.1子程序的设计方法 (40)6.2子程序的嵌套 (41)6.3子程序举例 (41)第 7 章高级汇编语言技术 (43)7.1宏汇编 (43)7.2重复汇编 (44)7.3条件汇编 (45)第 8 章输入/输出程序设计 (46)8.1I/O设备的数据传送方式 (46)8.2程序直接控制I/O方式 (47)8.3中断传送方式 (47)第 9 章 BIOS和DOS中断 (50)9.1键盘I/O (50)9.2显示器I/O (52)9.3打印机I/O (53)9.4串行通信口I/O (54)第 10 章图形与发声系统的程序设计 (55)10.1显示方式 (55)10.2视频显示存储器 (55)10.3EGA/VGA图形程序设计 (56)10.4通用发声程序 (57)10.5乐曲程序 (58)第 11 章磁盘文件存取技术 (59)11.1磁盘的记录方式 (59)11.2文件代号式磁盘存取 (60)11.3字符设备的文件代号式I/O (61)11.4BIOS磁盘存取功能 (62)附录:《IBM—PC汇编语言程序设计》习题参考答案 (63)第一章.习题 (63)第二章.习题 (64)第三章.习题 (65)第四章.习题 (79)第五章.习题 (84)第六章.习题 (104)第七章.习题 (118)第八章.习题 (125)第九章.习题 (130)第十章.习题 (134)第十一章.习题 (145)第 1 章 基础知识【教学目的】本章内容是本课程的基础,通过本章学习,使学生明确汇编语言程序设计的学科性质、基本内容和学习意义,掌握数制的转换、数据的编码,了解本门课程的教学要求和学习方法。
c51汇编语言16进制书写规则

C51汇编语言16进制书写规则1. 概述C51汇编语言是一种常用于嵌入式系统开发的低级语言,它通过对CPU 的指令进行底层控制,可以实现对硬件设备的高效操作。
在编写C51汇编程序时,经常会用到16进制数值,因此了解16进制数值的书写规则对于正确编写程序至关重要。
本文将对C51汇编语言16进制书写规则进行详细介绍。
2. 16进制数值的表示方式16进制数值由0-9和A-F共16个字符组成,分别对应10-15的十进制数值。
在C51汇编语言中,16进制数值可以使用0x或者#前缀进行表示,例如0x1A或者#1F表示16进制数值1A和1F。
3. 16进制数值的书写规则在C51汇编语言中,16进制数值的书写规则如下:3.1 小写字母表示在书写16进制数值时,C51汇编语言允许使用小写字母a-f来表示十六进制的A-F,也就是说,整个16进制数值可以使用小写字母来表示,例如:0x1a3b。
3.2 数值前缀在表示16进制数值时,一般会在数值前面加上0x或者#前缀,这样可以明确表示这是一个16进制数值而不是10进制数值。
3.3 数值范围在C51汇编语言中,16进制数值的范围通常是0x00到0xFF,表示的是一个字节范围内的数值。
4. 16进制数值的应用在C51汇编语言程序中,16进制数值经常用于表示寄存器的位置区域、控制寄存器的位操作、设置定时器的初值等。
使用16进制数值可以有效地减少程序的长度,提高程序的执行效率。
5. 总结了解C51汇编语言16进制数值的书写规则对于编写高质量、高效率的程序至关重要。
通过掌握16进制数值的表示方式和书写规则,开发人员可以更加灵活地利用C51汇编语言来实现对嵌入式系统的底层控制,从而更好地满足项目的需求。
在C51汇编语言程序中,16进制数值的合理使用可以提高程序的可读性和可维护性,减少程序的长度,提高程序的执行效率。
对C51汇编语言16进制数值的书写规则进行了解和掌握对于程序开发人员至关重要。
【汇编】16进制转换成10进制(三种方法)

【汇编】16进制转换成10进制(三种⽅法)汇编语⾔程序:16进制转换成10进制(三种⽅法)1;天⽔浪客(Gouki Jiang) , 16进制to10进制例题 2007.5.182 STACK SEGMENT PARA STACK3 S_AREA DW 100H DUP(?)4 S_TOP EQU $-S_AREA5 STACK ENDS67 DATA SEGMENT PARA8 VALUE DW 0EB9AH ;0603149 RESULT DB 5 DUP(?),'$'10 DATA ENDS1112 CODE SEGMENT PARA13 ASSUME CS:CODE,DS:DATA,SS:STACK1415 MAIN PROC FAR16MOV AX,DATA17MOV DS,AX18MOV AX,STACK19MOV SS,AX20MOV SP,S_TOP21MOV CX,522MOV AX,VALUE23MOV BX,1024MOV DI,OFFSET RESULT+42526JYB:XOR DX,DX27DIV BX28OR DL,30H29MOV BYTE PTR [DI],DL30DEC DI31 LOOP JYB32MOV DX,OFFSET RESULT33MOV AH,934INT 21H3536EXIT:MOV AX,4C00H37INT 21H38 MAIN ENDP39 CODE ENDS40 END MAIN4142;---------------------------------------------4344;天⽔浪客(Gouki Jiang) , 16进制to10进制倒除 2007.5.1845 STACK SEGMENT PARA STACK46 DW 100H DUP(?)47 STACK ENDS4849 DATA SEGMENT PARA50 VALUE DW 0EB9AH ;06031451 DATA ENDS5253 CODE SEGMENT PARA54 ASSUME CS:CODE,DS:DATA,SS:STACK5556 MAIN PROC FAR57MOV AX,DATA58MOV DS,AX59MOV CX,560MOV AX,VALUE61MOV BX,106263JYB1:XOR DX,DX64DIV BX65OR DL,30H66PUSH DX67 LOOP JYB168MOV CX,569JYB2:POP DX70MOV AH,271INT 21H72 LOOP JYB273EXIT:MOV AX,4C00H74INT 21H75 MAIN ENDP76 CODE ENDS77 END MAIN78;-----------------------------------------------7980;天⽔浪客(Gouki Jiang) , 16进制to10进制顺除 2007.5.1881 STACK SEGMENT PARA STACK82 DW 100H DUP(?)83 STACK ENDS8485 DATA SEGMENT PARA86 VALUE DW 0EB9AH ;06031487 DIVISOR DW 10000,1000,100,10,188 DATA ENDS8990 CODE SEGMENT PARA91 ASSUME CS:CODE,DS:DATA,SS:STACK9293 MAIN PROC FAR94MOV AX,DATA95MOV DS,AX96MOV CX,597MOV AX,VALUE98MOV SI,OFFSET DIVISOR99100JYB:XOR DX,DX101DIV WORD PTR[SI]102PUSH DX103OR AL,30H104MOV DL,AL105MOV AH,2106INT 21H107INC SI108INC SI109POP AX110 LOOP JYB111112EXIT:MOV AX,4C00H113INT 21H114 MAIN ENDP115 CODE ENDS116 END MAIN117118;-------------------------------------。
课程设计报告--汇编程序设计(进制转换)

课程设计报告--汇编程序设计(进制转换)汇编语言课程设计报告:代码与数制之间的转换内容提要:本课程设计的主要内容是代码与数制之间的转换~程序的主要功能如下:1. 将十六进制数转换成其对应的ASCII码2. 将ASCII码转换成其对应的十六进制数3. 实现二进制数与十六进制数之间相互转换4. 实现十进制数与二进制数之间相互转换5. 实现十六进制数与十进制数之间相互转换数制转换是计算机科学技术中最为基础的运算~在日常生活中~人们习惯性地使用十进制数进行计算。
而在计算机内部~所有的信息,数、字符、汉字、计算机的指令、状态,都是用二进制数来表示的。
在计算机中~二进制数的运算、处理比十进制数的更容易实现。
有时为了缩短书写~在计算机中还采用十六进制数。
所以~我们需要把数从二进制数形式转换成其他进制的形式~甚至在不同的进位制之间进行转换。
- 1 -汇编语言课程设计报告:代码与数制之间的转换目录一、前言〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃3 1.1 程设计的目的〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃3 1.2 代码与数制之间的转换程序的意义〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃3 1.3 数制之间的转换程序的主要功能〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃3正文〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃3 二、2.1 代码与数制之间相互转换程序的设计大纲〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃3 2.2 代码与数制之间相互转换程序的结构图〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃4 2.3 友好交互界面结构图〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃5 2.4 程序流程图〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃62.4.1 主程序流程图〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃62.4.2 键盘输入子程序流程图〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃62.4.3 ASC码转16进制子程序流程图〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃72.4.4 16进制转ASC进制子程序流程图〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃82.4.5 2,16进制子程序流程图〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃82.4.6 2?16进制子程序流程图〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃92.4.7 16?2进制子程序流程图〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃92.4.8 2~10进制子程序流程图〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃102.4.9 2?10进制子程序流程图〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃102.4.10 10?2进制子程序流程图〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃112.4.11 10~16进制子程序流程图〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃112.4.12 10?16进制子程序流程图〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃122.4.13 16?10进制子程序流程图〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃12三、源程序及其注释〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃13四、课程设计体会〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃29五、参考文献〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃〃29- 2 -汇编语言课程设计报告:代码与数制之间的转换课程设计题目:代码与数制之间的转换一、前言1.1 课程设计的目的, 加深对汇编语言课程理论方面的理解, 通过编写一定规模和难度的程序,进行一次较全面的汇编编程训练,提高分析问题和解决问题的能力, 提高调试程序的能力1.2 代码与数制之间的转换程序的意义数制转换是计算机科学技术中最为基础的运算,在日常生活中,人们习惯性地使用十进制数进行计算。
汇编二进制转十进制,十六进制代码

特注:代码可以优化,请读者自己思考,运行结果绝对没问题!实验二数制转换程序代码二进制到十进制转换DATAS SEGMENTS0 DB "please input a binary (length<16):",0AH,0DH,"$"S1 DB 18S2 DB ? ;总长度S3 DB 16 DUP(0);存放首地址S4 DW ? ;存放输入的二进制数S5 DB "The nuber is not a binary!","$"S6 DB "Do you want to continue?(Y or N):",0AH,0DH ,"$" TEMP DB 0BUF DB 5 DUP (?);此处输入数据段代码DATAS ENDSSTACKS SEGMENTDB 256 DUP (?) ;初始化堆栈大小为100;此处输入堆栈段代码STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKSSTART:MOV AX,DATASMOV DS,AXMOV AX,STACKSMOV SS,AX;---------------------------------------------------;输入一个二进制数LOOPP:CALL CLSCALL HCMOV DX,OFFSET S0 ;显示字符串s0CALL G9 ;"please input a binary (length<16):",0AH,0DH,"$" MOV DX,OFFSET S1 ;申请16个内存空间MOV AH,0AH ;将数输入到缓冲区INT 21H;------------------------------------------------------ ;将输入的数据整合放到AX中MOV SI,OFFSET S3MOV CL,S2MOV CH,0HMOV AX,0HLOOP1:CMP BYTE PTR [SI],30H ;判断是否为二进制数JL EXITCMP BYTE PTR [SI],31HJG EXITMOV BL,[SI]SUB BL,30HMOV BH,0HINC SISHL AX,1ADD AX,BXLOOP LOOP1MOV S4,AXCALL HC;----------------------------------------------------- ;二进制转换成十进制MOV SI,5MOV AX,S4MOV CX,5MOV BX,10LP: CWDMOV DX,0DIV BXADD DL,30HMOV BUF [SI-1],DLDEC SILOOP LP;-------------------------------------------------;显示结果CALL COUNT ;找到第一个非零元的位置MOV AL,TEMPMOV AH,0MOV SI,AXMOV CX,5LOOPPP:MOV DL,BUF[SI]MOV AH,02HINT 21HINC SILOOP LOOPPPJMP EXIT1EXIT:CALL HCMOV DX,OFFSET S5 ;显示字符串S5CALL G9 ;"The nuber is not a binary!","$" EXIT1:CALL HCMOV DX,OFFSET S6 ;显示字符串S6CALL G9 ;"Do you want to continue?(Y or N):",0AH,0DH ,"$" MOV AH,1INT 21HCMP AL,'Y'JE LOOPPCMP AL,'y'JE LOOPPMOV AH,4CHINT 21HCOUNT: ;判断第一个非零元的位置MOV TEMP,0MOV SI,0MOV CX,4LOO:MOV DL,BUF[SI]CMP DL,30HJNE EXIT3MOV AL,TEMPADD AL,1MOV TEMP,ALINC SILOOP LOOEXIT3: RETG9:MOV AH,9 ;显示功能调用 INT 21HCALL HCRETHC: ;回车换行MOV DL,0AHMOV AH,2INT 21HMOV DL,0DHMOV AH,2INT 21HRETCLS:MOV AH,6 ;屏幕初始化MOV AL,0MOV BH,7HMOV CH,0MOV CL,0MOV DH,24MOV DL,79INT 10HMOV BH,0 ;置光标位子MOV DX,0MOV AH,2INT 10HRETCODES ENDSEND START二进制到十六进制转换DATAS SEGMENTS0 DB "please input a binary(length<16):",0AH,0DH,"$"S1 DB 17S2 DB ? ;总长度S3 DB 16 DUP(0);存放首地址S4 DW ? ;存放输入的二进制数S5 DB "The nuber is not a binary!","$"S6 DB "Do you want to continue?(Y orN):",0AH,0DH ,"$"S7 DB "The length of the numbei is not 16","$" DATAS ENDSSTACKS SEGMENTSTACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKSSTART:MOV AX,DATASMOV DS,AXMOV AX,STACKSMOV SS,AX;---------------------------------------------------;输入一个二进制数LOOPP:CALL CLSCALL HCMOV DX,OFFSET S0 ;显示字符串S0CALL G9 ;"please input a binary (length<16):",0AH,0DH,"$"MOV DX,OFFSET S1 ;申请16个内存空间MOV AH,0AH ;将数输入到缓冲区INT 21H;------------------------------------------------------ ;将输入的数据整合放到AX中MOV SI,OFFSET S3MOV CL,S2MOV CH,0HMOV AX,0HLOOP1:CMP BYTE PTR [SI],30H ;判断是否为2进制JL EXITCMP BYTE PTR [SI],31HJG EXITCMP S2,10H ;判断是否为16为二进制JNE EXIT2MOV BL,[SI]SUB BL,30HMOV BH,0HINC SISHL AX,1ADD AX,BXLOOP LOOP1MOV S4,AXCALL HC;----------------------------------------------------- ;二进制变16进制并输出MOV BX,S4CMP BX,0JZ ZEROMOV CH,04HMOV CL,04HNEXT:ROL BX,CLMOV DL,BLAND DL,0FHADD DL,30HCMP DL,3AHJB LADD DL,7HL:CALL XSDEC CHJNZ NEXTJMP WEISHUZERO:MOV DL,'0'CALL XSWEISHU:MOV DL,'H'CALL XSJMP EXIT1;----------------------------------------------------------------;选择用的程序EXIT:CALL HCMOV DX,OFFSET S5 ;显示字符串S5CALL G9 ; "The nuber is not a binary!","$" JMP EXIT1EXIT2:CALL HCMOV DX,OFFSET S7 ;显示字符串S7CALL G9 ; "The length of the numbei is not 16","$"EXIT1:CALL HCMOV DX,OFFSET S6CALL G9 ;显示字符串S6MOV AH,1 ;"Do you want to continue?(Y or N):",0AH,0DH ,"$"INT 21HCMP AL,'Y'JE LOOPPCMP AL,'y'JE LOOPPMOV AH,4CHINT 21HG9:MOV AH,9 ;显示功能调用 INT 21HCALL HCRETHC: ;回车换行MOV DL,0AHMOV AH,2INT 21HMOV DL,0DHMOV AH,2INT 21HRETCLS:MOV AH,6 ;屏幕初始化MOV AL,0MOV BH,70HMOV CH,0MOV CL,0MOV DH,24MOV DL,79INT 10HMOV BH,0 ;置光标位子MOV DX,0MOV AH,2INT 10HRETXS: ;2号功能显示MOV AH,2INT 21HRETCODES ENDSEND START。
计算机组成原理与汇编语言程序设计课后习题及解答(详解)

计算机组成原理与汇编语言程序设计课后习题及解答徐洁,俸远祯电子工业出版社第1章习题一1.什么是程序存储工作方式?答:计算机的工作方式——存储程序工作方式。
即事先编写程序,再由计算机把这些信息存储起来,然后连续地、快速地执行程序,从而完成各种运算过程。
2.采用数字化方法表示信息有哪些优点?用数字化方法表示信息的优点:(1)抗干扰能力强, 可靠性高。
(2)依靠多位数字的组合,在表示数值时可获得很宽的表示范围以及很高的精度。
(3)数字化的信息可以存储、信息传送也比较容易实现。
(4)可表示的信息类型与范围及其广泛,几乎没有限制。
(5)能用逻辑代数等数字逻辑技术进行信息处理,这就形成了计算机硬件设计的基础。
3.如果有7×9点阵显示出字符A的图像,请用9个七位二进制代码表示A的点阵信息。
4.数字计算机的主要特点是什么?1. (1)能在程序控制下自动连续地工作;(2|)运算速度快;(3)运算精度高;(4)具有很强的信息存储能力;(5)通用性强,应用领域及其广泛。
5.衡量计算机性能的基本指标有哪些?答:衡量计算机性能的基本指标:(1)基本字长——参加一次运算的数的位数;(2)数据通路宽度——数据总线一次能并行传送的位数;(3)运算速度——可用①CPU的时钟频率与主频,②每秒平均执行指令数,③典型四则运算的时间来表示。
(4)主存储器容量——可用字节数或单元数(字数)×位数来表示。
(6)配备的外围设备及其性能。
(7)系统软件配置。
7.系统软件一般包括哪些部分?列举你所熟悉的三种系统软件。
系统软件一般包括操作系统,编译程序、解释程序、各种软件平台等。
例如WINDOWS98操作系统,C 语言编译程序等,数据库管理系统。
8.对源程序的处理有哪两种基本方式?对源程序的处理通常有两种处理方式:解释方式和编译方式。
第2章习题二1.将二进制数(101010.01)2 转换为十进制数及BCD码。
解:(101010.01)2 = (42.25)10 = (01000010.00100101)BCD2.将八进制数(37.2)8转换为十进制数及BCD码.解:(37.2)8 = (31.25)10 =(00110001.00100101)BCD3.将十六进制数(AC.E)转换为十进制数及BCD码.解: (AC.E)16 =(172.875)10 = (000101110010.100001110101)BCD4.将十进制数(75.34)10转换为8位二进制数及八进制数、十六进制数。
汇编语言习题解答

8086/8088汇编语言习题解答第一章、试根据自己使用计算机的经历,列举几个必须使用或最好是使用汇编语言编制程序的事例。
、试完成下列数制间的转换⑴、十进制数转换为8位二进制数十进制:100 对应二进制:01100100B十进制:56 对应二进制:00111000B十进制:111 对应二进制:01101111B十进制: 120 对应二进制:01111000B十进制: 70 对应二进制:01000110B⑵、8位二进制数(无符号数)转换为十进制数二进制:01010101B 对应十进制:85二进制:B 对应十进制:170二进制:B 对应十进制:240二进制:00001111B 对应十进制:15⑶、十进制数转换为十六进制数十进制:40 对应二进制:00101000B十进制:80 对应二进制:01010000B十进制:105 对应二进制:01101001B十进制: 114 对应二进制:01101101B十进制: 207 对应二进制:B、试把下面用补码表示的二进制数转换为对应的十进制真值二进制补码:01111000 对应的十进制值数真值:+120二进制补码:对应的十进制值数真值:-39二进制补码:对应的十进制值数真值:-127二进制补码:对应的十进制值数真值:-120二进制补码:00100111 对应的十进制值数真值:+39二进制补码:对应的十进制值数真值:-16、由键盘输入字符通常都是以该字符的ASCII码形式表示的。
若现在从键盘上输入十六进制数0~F,那么应如何处理才能把十六进制转换为4位二进制数0000~1111.答:将键盘输入的数0~F的ASCII码,每输入一个字符,减去30H后,再存入内存,这样就完成了把从键盘上输入的十六进制ASCII码转换为4位二进制数0000~1111.、试分别判断下列各组数据中哪个数据最大?哪个最小?①、A= B=0,101D C=0,101H②、A=1011B B=1011D C=1011H答:第①组:A=1×21-+1×23-=B=C=1×161-+163-=+=所以A最大,C最小第②组,B最大,A=B最小、现有一个二进制数.若将该数看着是无符号数、原码表示的带符号数、补码表示的带符号数,它对应的十进制数的真值是多少?答:.的无符号数的十进制是:+182;.的原码带符号数的十进制是:-54.补码表示的带符号数的十进制是:+74、下列各组数据均为十进制数,先将各数据转换为补码表示的带符号数,然后用补码的加减运算分别完成下列各小题,并用十六进制数形式回答运算结果。
汇编语言进制转换之16进制转10进制

汇编语⾔进制转换之16进制转10进制 使⽤8086汇编,输⼊⼀个16进制的数,程序把该16进制数转换为相应的10进制数输出程序运⾏截图:要实现这样⼀个程序,思路可以是这样的: 1.由于我们读⼊的键盘输⼊是ASCII码表⽰的,且输⼊⼀个字符便得到⼀个ASCII码,如输⼊ab,程序中可以得到61h和62h。
现在的问题是怎么把这些输⼊的字符表⽰成⼀个完整的数。
对于这个问题,我们可以把每次输⼊的字符的ASCII码先转换为对应的数,0-9之间的数,根据ASCII码表发现可以⽤ ASCII码减30h 得到0-9对应的⼗六进制数值,对于a-b,⽤ASCII码减57h 得到a-b对应的⼗六进制数值。
2.得到这些对应的数值之后,要把它们按输⼊顺序组合起来,这⾥可以⽤移位运算来组合,如根据输⼊转换得 1、2两个⼗六进制数值,1的⼆进制表⽰为0001,2的⼆进制表⽰为0010,把0001左移4位得到00010000,加上0010,得到0001010,00010010表⽰的便是12h。
3.把输⼊转换为数值之后就准备要输出了,可采⽤除10法得到各个位上的数,如要输出110,先要把110转为 1、1、0 再把对应的数值加上30h转为ASCII码后输出,把110转换为 1、1、0,110除以10商为11,余数为0,此时余数作为个位上的数,得到个位为0;再⽤上⼀步的商11作为被除数除以10,得到商为10,余数为1,此时余数作为⼗位上的数,得到⼗位为1;重复上述步骤,商1作为被除数除以10,商0余1,得到百位为1,此时商等于0,算法结束。
DATAS SEGMENTbin dw 10 dup(?) ;存放⼆进制结果buf db 5 dup(?) ;存放⼗进制数各个数位上的数值如100,存放为 1,0,0msg1 db 'please input a hex number',13,10,'$'msg2 db 'the dec number:',13,10,'$'crlf db 13,10,'$' ;回车换⾏DATAS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATASSTART:MOV AX,DATASMOV DS,AXmov bx,0 ;初始化bxLEA dx,msg1 ;输出提⽰字符串mov ah,9int 21hinput:mov ah,1 ;输⼊⼀个字符int 21hsub al,30h ;把al中的ascii码转换成数值jl initcmp al,10 ;输⼊的数在0-9之间跳转jl toBinsub al,27h ;再转换为a-fcmp al,0ah ;输⼊的字符⽐a⼩jl init ;结束输⼊cmp al,10h ;输⼊的字符⽐f⼤jge init ;结束输⼊toBin: ;转换为⼆进制,把输⼊组合成意义上的数值mov cl,4shl bx,cl ;bx左移4位mov ah,0add bx,ax ;把输⼊后并从ascii码转换来的值与bx相加mov bin,bx ;转换成⼆进制数后存到内存binjmp input ;继续输⼊init: ;初始化,准备转换mov ax,binmov bx,10mov si,4 ;循环四次,最⼤到万位toDec: ;转为各个数位上的数值,如100转换为1,0,0 百位为1...mov dx,0div bx ;除10法得到各个位上的数值mov [buf+si],dl ;余数为该位上的值,第⼀次循环为个位,第⼆次为⼗位...;存到内存中dec sicmp ax,0 ;商是否为0,为0算法结束ja toDeclea dx,crlf ;显⽰提⽰mov ah,9int 21hlea dx,msg2mov ah,9int 21houtput: ;输出内存中存放的各个数位上的数值inc simov dl,[buf+si]add dl,30h ;转为asciimov ah,2int 21hcmp si,4jb outputmov ah,1int 21hMOV AH,4CHINT 21HCODES ENDSEND START到此这篇关于汇编语⾔进制转换之16进制转10进制的⽂章就介绍到这了,更多相关汇编 16进制转10进制内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持! 。
四字节十六进制数转十进制数

实验四四字节十六进制数转十进制数一、实验目的进一步熟悉8086汇编指令,了解十六进制数转十进制数的方法。
二、实验内容从键盘上输入8位十六进制数,实现四字节十六进制数转8位十进制数,并在数码管上显示。
注意输入数据必须在00000000H ~05F00000H 范围,否则,结果超出8位十进制数,无法正确显示。
三、程序框图主程序四字节十六转十进制子程序四、实验步骤1、连线说明: 3、结果显示在F4区的数码管上五、程序清单.MODEL TINYEXTRN Display8:NEAR, GetKey:NEAR EXTRN F1:BYTE .STACK 100.DATABUFFER DB 8 DUP(?).CODESTART: MOV AX,@DATAMOV DS,AXMOV ES,AXNOPMOV F1,0 ;先清除显示,再接收键输入START1: LEA DI,BUFFERMOV CX,8 ;按键次数CALL GetKey ;得到4字节十六进制数MOV F1,1 ;接收到第一个键,才清除显示MOV SI,WORD PTR BUFFERMOV DI,WORD PTR BUFFER + 2CALL B4toD4 ;转换成十进制数LEA DI,BUFFER ;存放显示结果CALL B1toB2 ;低位MOV AL,AHCALL B1toB2MOV AL,BLCALL B1toB2MOV AL,BHCALL B1toB2LEA SI,BUFFER+7MOV CX,7CALL BlackDisplay ;将高位0消隐LEA SI,BUFFERCALL Display8JMP START1;将一个字节压缩BCD码转换成二个字节非压缩BCD码B1toB2 PROC NEARPUSH AXAND AL,0FHSTOSBPOP AXAND AL,0F0HROR AL,4STOSBRETB1toB2 ENDPBlackDisplay PROC NEARSTDMOV DI,SIBlackDisplay1: LODSB ;将高位0消隐CMP AL,0JNZ ExitMOV AL,10HSTOSBLOOP BlackDisplay1Exit: CLDRETBlackDisplay ENDP;四字节十六进制数转十进制数:DISI为十六进制,BXAX为压缩BCD码B4toD4 PROC NEARXOR AX,AXXOR BX,BXMOV CX,32B4toD4_1: RCL SI,1RCL DI,1ADC AL,ALDAAXCHG AL,AHADC AL,ALDAAXCHG AL,BLADC AL,ALDAAXCHG AL,BHADC AL,ALDAAXCHG AL,BHXCHG AL,BLXCHG AL,AHLOOP B4toD4_1RETB4toD4 ENDPEND START六、思考题如果不考虑在数码管上显示,不限制数据范围,程序应如何编写。
汇编教程,汇编指令详解

A 0 0 1 1
B 0 1 0 1
AvB 0 1 1 1
21
1.4.3 “非”运算(NOT) 如变量为A,则它的“非”运算的结果用 A来 表示。“非”运算规则可用下表说明: A A 0 1 1 0
22
1.4.4 “异或”运算(XOR Exclusive—OR)
“异或”运算可用符号 来表示。 运算规则:即当两个变量的取值相异时,它们 的“异或” 结果为1。
13
用补码表示数时的符号扩展问题
符号扩展:将一个数从位数较少扩展到 位数较多。正数的符号扩展:高位补0, 负数的符号扩展:高位补1。
汇编语言程序设计教程(第二版)习题参考答案

汇编语言程序设计教程(第二版)习题参考答案第1章计算机基础知识1.计算机的应用分哪几个方面,请举例说明书中未提到的领域的计算机应用。
科学计算、数据处理、计算机控制、计算机辅助设计、人工智能、企业管理、家用电器、网络应用。
书中未提及的如:远程教育、住宅小区控制、飞行系统控制与管理等。
2.简述计算机的发展过程,请查阅相关资料,列出微机的发展过程。
电子管、晶体管、集成电路、大规模集成电路以IBM为例,微机的发展:4004、8008、8080、8086/8088、80286、80386、80486、Pentium 系列3.计算机的字长是怎么定义的,试举例说明。
计算机能同时处理二进制信息的位宽定义为计算机的字长。
如8086能同时进行16位二进制数据的运算、存储和传输等操作,该机器的字长为16位。
4.汇编语言中的基本数据类型有哪些?数值型数据和非数值型数据。
非数值数据如字符、字符串、逻辑值等。
(1)7BCH=011110111100B=1980D(2)562Q=101110010B=370D(3)90D=01011010B=5AH(4)1110100.111B=164.7Q=74.EH30H~39H 41H~5AH 61H~7AH9.在汇编语言中,如何表示二进制、八进制、十进制和十六进制的数值?用相应进制的数值加上进制标记即可。
二进制用B,如10101010B八进制用Q,如437Q。
十进制用D或不用,如54D,或54。
十六进制用H,如27A8H10.完成下列二进制数的加减运算。
(1)10101010 + 11110000 (2)11001100 + 01010100=110011010 =100100000(3)11011010 - 01010010 (4)11101110 - 01001101=10001000 =1010000111.完成下列十六进制数的加减运算。
(1)0FEA9 - 8888=7621H (2)0FFFF - 1234=EDCBH(3)0EAC0 + 0028=EAE8H (4)3ABC + 1678=5134H12.完成下列BCD码的运算。
汇编数值转换

汇编语言是一种低级编程语言,通常用于编写与计算机硬件紧密相关的程序。
在汇编语言中,数值转换可以通过使用特定的指令或宏来实现。
以下是一些常见的数值转换方法:1. 十进制转二进制:使用移位指令(例如SHL 或SHR)将十进制数转换为二进制数。
例如,将十进制数23 转换为二进制数可以执行以下指令:```assemblyMOV AX, 23 ; 将十进制数23 加载到AX 寄存器中SHL AX, 4 ; 将AX 寄存器中的值左移4 位,相当于将十进制数转换为二进制数```2. 二进制转十进制:使用加法指令将二进制数转换为十进制数。
例如,将二进制数1010010 转换为十进制数可以执行以下指令:```assemblyMOV AX, 01010010b ; 将二进制数1010010 加载到AX 寄存器中ADD AX, AX ; 将AX 寄存器中的值加到自身,相当于将二进制数转换为十进制数```3. 十六进制转十进制:使用移位和加法指令将十六进制数转换为十进制数。
例如,将十六进制数A3 转换为十进制数可以执行以下指令:```assemblyMOV AX, A3h ; 将十六进制数A3h 加载到AX 寄存器中SHL AX, 4 ; 将AX 寄存器中的值左移4 位,相当于将十六进制数转换为十进制数```4. 十进制转十六进制:使用移位和取模指令将十进制数转换为十六进制数。
例如,将十进制数255 转换为十六进制数可以执行以下指令:```assemblyMOV AX, 255 ; 将十进制数255 加载到AX 寄存器中SHR AX, 4 ; 将AX 寄存器中的值右移4 位,相当于将十进制数转换为十六进制数```这些是常见的数值转换方法,具体实现方式可能会因汇编语言的语法和编译器而有所不同。
微机原理课程设计_进制转换程序设计

课程设计任务书学生姓名:易杨专业班级:电信 0802 指导教师:曾刚工作单位:信息工程学院题目:进制转换程序设计初始条件:具备数字电路的理论知识;具备微机原理的理论知识和实践能力;熟悉汇编语言编程技术;熟悉80X86的CPU结构和指令系统;熟悉相关常用接口电路的设计使用方法。
要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)1、程序实现二进制、十进制、十六进制之间的转换2、在命令提示下输入相应进制数,回车后进行转换3、输入错误时应声响报警并拒绝输入4、程序采用汇编语言在PC机上完成5、完成符合学校要求的设计说明书时间安排:一周,其中2天程序设计,2天程序调试,1天完成课程设计报告书及答辩指导教师签名:年月日系主任(或责任教师)签名:年月日目录摘要 (I)1原理分析 (1)2程序设计流程 (3)2.1程序流程图 (3)2.2设计思路 (4)3程序设计 (5)3.1堆栈段数据段程序设计 (5)3.2主程序设计 (5)3.3输入二进制程序 (7)3.4输入十进制程序 (8)3.5输入十六进制程序 (8)3.6输出二进制程序 (9)3.7输出十进制程序 (9)3.8输出十六进制程序 (11)3.9回车键确定程序 (11)3.10报警程序 (12)4运行结果 (13)5心得体会 (15)参考文献 (16)摘要日常生活与实际应用中,往往需要计算机处理的信息是多种多样的,如各种进位制的数据,不同语种的文字符号和各种图像信息等。
但在计算机内部采用的是二进制计数制,这种进制表达方法对于人们研究分析是不那么方便的。
本次课程设计将通过所学的微机原理知识理论,用汇编语言编写程序,实现二进制、十进制与十六进制之间的相互转换,并在MF2KP软件上演示。
关键词:汇编程序进制转换MF2KP1 原理分析进位计数制是人们利用符号来计数的方法。
一种进位计数制包含一组数码符号和两个基本因素。
数码是用不同的数字符号来表示一种数制的数值,这些数字符号称为”数码”。
数制转化实验报告

一、实验目的1. 理解数制转化的基本原理和方法。
2. 掌握十进制、二进制、八进制和十六进制之间的相互转换。
3. 熟悉汇编语言编程,提高编程能力。
二、实验环境1. 操作系统:Windows 102. 编译器:Keil uVision 53. 汇编语言:x86汇编语言三、实验内容1. 十进制到二进制的转换2. 二进制到八进制的转换3. 八进制到十六进制的转换4. 十六进制到十进制的转换四、实验步骤1. 十进制到二进制的转换(1)定义变量:src为十进制数,dst为二进制数。
(2)编写程序:```assemblymov ax, src ; 将十进制数src存入寄存器axmov cx, 32 ; 初始化循环计数器cx为32(二进制数32位)mov bx, 0 ; 初始化二进制数dst为0convert_loop:shl ax, 1 ; 将ax左移一位,最高位进入进位标志位jc carry_bit; 如果进位标志位为1,则跳转到carry_bitjmp next_bitcarry_bit:or bx, 1 ; 如果进位标志位为1,则将bx最低位设为1next_bit:loop convert_loop ; 循环32次mov dst, bx ; 将转换后的二进制数存入变量dst```(3)运行程序,查看结果。
2. 二进制到八进制的转换(1)定义变量:src为二进制数,dst为八进制数。
(2)编写程序:```assemblymov ax, src ; 将二进制数src存入寄存器axmov cx, 3 ; 初始化循环计数器cx为3(二进制数每3位转换一位八进制数)mov bx, 0 ; 初始化八进制数dst为0convert_loop:mov dx, ax ; 将ax的值复制到dxand dx, 0x07 ; 将dx与0x07进行按位与操作,保留最低3位add dl, '0' ; 将dl的值转换为对应的字符mov [dst], dl; 将转换后的八进制数存入变量dstshr ax, 3 ; 将ax右移3位,准备下一组3位loop convert_loop ; 循环3次```(3)运行程序,查看结果。
汇编语言程序设计 第1篇 汇编语言基础知识

汇编 语言实现 汇编后的目 标文件只有 208字节
2019/1/23
11
计算机科学与技术系
《汇编语言程序设计》
1.1
汇编语言概述
1.1.2 汇编语言的特点
建议: ●充分注意“汇编”课实践性强的特点, ●多读程序,多写程序,多上机调试程序, ●熟悉PC机的编程结构, ●掌握汇编语言及其程序设计的基本概念、
2019/1/23
第 1章
汇编语言基础知识
19
计算机科学与技术系
《汇编语言程序设计》
1.2
进位计数制及其转换
1.2.2 不同数制之间的转换
(3)一般的十进制数转换成二进制数 为了将一个既有整数又有小数部分的十进制数转换成二进制 数,可以将其整数部分和小数部分分别进行转换,然后再组合 起来。 例:117.8125D = 1110101.1101B
1.1.2 汇编语言的特点
经常与高级语言配合使用,应用十分广泛。
2019/1/23
第 1章
汇编语言基础知识
9
计算机科学与技术系
《汇编语言程序设计》
1.1
汇编语言概述
1.1.2 汇编语言的特点
编程实现 c =a+b,并在屏幕上显示出结果。 #include "stdafx.h" #include "stdio.h" int main(int argc, char* argv[]) { int a,b,c; a=1; b=2; c=a+b; printf(“c=%d\n",c); return 0; }
计算机科学与技术系
《汇编语言程序设计》
1.2
进位计数制及其转换
1.2.2 不同数制之间的转换
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
POP AX
RET
OUTPUT ENDP
;2位的十六进制数的输入,如12h,1h
INPUT PROC NEAR
PUSH AX
PUSH CX
PUSH BX
MOV varHex,0
MOV varMul,1
XOR CX,CX
JBE EXIT01
;BL = varMUL*16
MOV AL,varMul
MOV BH,16
MUL BH
MOV BL,AL
POP AX
;if(AL为数字)
CMP AL,39H
JBE RENUM
;if(AL为A~F)
CMP AL,46H
JBE REWORD1
ASSUME CS:CODES,DS:DATAS,SS:STACKS
MAIN PROC NEAR
MOV AX,DATAS
MOV DS,AX
;此处输入代码段代码
;2位的十六进制数的输入,如12h,1h
;将其转换成十进制结果存放在varHex中
ADD AL,10
ADD varHex,AL
SUB CX,1
JMP LOOP3
WORD2:
SUB AL,61H
ADD AL,10
ADD varHex,AL
SUB CX,1
JMP LOOP3
;varHex += 第二位~ *(10?)
LOOP3:
CMP CX,0
MOV BL,AL
ADD varHex,BL
SUB CX,1
JMP LOOP3
EXIT01:
POP BX
POP CX
POP AX
RET
INPUT ENDP
CODES ENDS
END MAIN
DATAS SEGMENT
;此处输入数据段代码
RET
MAIN ENDP
;换行回车
CRLF PROC NEAR
PUSH DX
PUSH AX
MOV DL,0AH
MOV AH,02H
INT 21H
MOV DL,0DH
MOV AH,02H
INT 21H
POP AX
POP DX
RET
INT 21h
;输出余数、
POP BX
;余数= 余数*10 = AX
MOV AL,BH
MOV DL,10
MUL DL
;AX/51 输出商
;AX=商 DX = 余数
MOV DX,0
MOV BX,51
DIV BX
PUSH DX
ADD AL,30h
;实现输入,当输入h或H时,结束输入
LOOP1:
;当输入h或H时,结束输入
MOV AH,01h
INT 21H
CMP AL,48h
JE LOOP2
CMP AL,68h
JE LOOP2
;将输入的字符依次入栈
ADD CX,1
PUSH AX
JMP LOOP1
;输入2位十六进制数字,然后转换成十进制输出
DATAS SEGMENT
;此处输入数据段代码
varHex DB ?
varMul DB ?
DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
;此处输入代码段代码
;将输入的字符串转换成十进制数,存放在varHex
;varHex += 第一位字符*1
LOOP2:
;if(cx<=0) JMP EXIT01
CMP CX,0
JBE EXIT01
;varHex = varHex + AL
POP AX
;if(AL为数字)
CMP AL,39H
CALL NEAR PTR INPUT
;换行回车
CALL NEAR PTR CRLF
;输出十进制数 varHex
CALL NEAR PTR OUTPUT
;结束程序
MOV AH,4CH
INT 21H
CRLF ENDP
;将varHex以0.00~5.00格式输出
;x.yz
;varHeUT PROC NEAR
PUSH AX
PUSH BX
PUSH DX
;AX=varHex
MOV AH,0
MOV AL,varHex
;varHex/51
MOV AH,4CH
INT 21H
CODES ENDS
END START
ADD AL,10
;varHex += AL*(BL)
MUL BL
MOV BL,AL
ADD varHex,BL
SUB CX,1
JMP LOOP3
REWORD2:
SUB AL,61h
ADD AL,10
;varHex += AL*(BL)
MUL BL
;商=AL 余数=AH
MOV BL,51
DIV BL
PUSH AX
;输出商
POP BX
ADD BL,30h
MOV AH,02h
MOV DL,BL
INT 21h
;将余数重新入栈
;BH=余数
PUSH BX
;输出.
MOV AH,02
MOV DL,2Eh
MOV DL,AL
MOV AH,02
INT 21h
;余数*10/51
;然后输出商
POP AX
MOV DL,10
MUL DL
MOV DL,51
DIV DL
ADD AL,30h
MOV DL,AL
MOV AH,02h
INT 21h
POP DX
JBE NUM
;if(AL为A~F)
CMP AL,46H
JBE WORD1
;if(AL为a~f)
CMP AL,66h
JBE WORD2
NUM:
SUB AL,30H
ADD varHex,AL
SUB CX,1
JMP LOOP3
WORD1:
SUB AL, 41H
;if(AL为a~f)
CMP AL,66h
JBE REWORD2
RENUM:
SUB AL,30H
;varHex += AL*(BL)
MUL BL
MOV BL,AL
ADD varHex,BL
SUB CX,1
JMP LOOP3
REWORD1:
SUB AL, 41H