admin 管理员组

文章数量: 1087139


2024年12月22日发(作者:fetched 翻译)

十进制转换十六进制程序设计

1.谈谈你对本课程学习过程中的心得体会与建议?

在学汇编的过程中,最重要的就是要掌握汇编语言中的指令的一些基本用

法。当然要能够真正的了解其中的内涵,这样在实际的编程中也能够像运用高级

语言一样灵活的变通。汇编语言作为一种低级程序设计语言,既然是低级所以应

该是最底层的,与计算机内部的结构联系应该联系很密切,而且我在学习中也深

刻的了解到了这一点。比如说后来学到的寄存器、中断、还要各种寻址方式以及

进栈出栈,好多的就是设计到计算机硬件。

汇编程序给人感觉最烦的就是好多程序的结果不能直接通过运行EXE文件

显示出来,而更多的是经过DEBUG单步调试才能看到其内在变化,看是否正确。

汇编程序不像其他的高级语言一样需要编译器,而是直接的就能在记事本上编

写,然后进行汇编和连接就可以了。学习汇编调试,关键就是要掌握DEBUG的

运用。汇编程序把汇编语言翻译成机器语言的过程称为汇编。是一种功能很强的

程序设计语言,也是利用计算机所有硬件特性并能直接控制硬件的语言。比机器

语言易于读写、调试和修改,同时具有机器语言全部优点。但在编写复杂程序时,

相对高级语言代码量较大,而且汇编语言依赖于具体的处理器体系结构,不能通

用,因此不能直接在不同处理器体系结构之间移植。

一开始,我对PC的寻址方式和很不理解。这方面的知识是很抽象的,需要

比较强的空间想象能力。尤其是我们在输入字符串时,那这些字符是如何进行排

列的呢。对于这个问题,我相信很多人也和我一样很难想象。汇编语言的寻址方

式有直接寻址,寄存器寻址,基址变址寻址,相对基址变址寻址等等,掌握这些

都是编写汇编程序很重要的环节。

我认为汇编语言本身还是一门很重要的应用技术。在学习过程中,我常常上

网搜索资料辅助理解,遇到难以理解的问题时也学会自己解决,我想这不仅是知

识层面上的提升,更是自己在学习能力上的提升。

2.

《汇编语言程序设计》课程设计,

从以下5个题目中任选其一作答。

题目一:十进制转换十六进制程序设计

一、算法思路

采用一个子程序DECIBIN实现从键盘取得十进制数并把它转换为二进制

数;另一个子程序BINIHEX把此二进制数以十六进制数的形式在屏幕上显示出

来。为避免屏幕上的重叠,另外用CRLF子程序取得回车和换行效果。各个子程

序之间用BX寄存器来传送信息。在过程DECIBIN中取得的输入数据转换为二

进制数后保存在BX寄存器中,而过程BINIHEX需要把BX寄存器中的数用十

六进制形式显示出来。

二、算法程序框图

开始

调用DECIBIN 调用CRLF 调用BINIHEX 调用CRLF

从键盘取得十进制

数,保存在BX中 显示回车和换行 用十六进制数形式 表达显示BX中的数

调用CRLF

三、主要函数代码程序(指令含义在代码后面):

DECIHEX SEGMENT ; 定义代码段

ASSUME CS:DECIHEX

MAIN PROC FAR ; 主程序

REPEAT: CALL DECIBIN ; 调用子程序输入十进制数

CALL CRLF ; 显示回车、换行

调用

BINIHEX

用十六进制数形

式 表达显示BX

中的数

调用CRLF

显示回车和换行

调用

DECIBIN

从键盘取得十进制

数,保存在BX中

开始

完成

CALL BINIHEX ; 以十六进制数输出

CALL CRLF ; 显示回车、换行

JMP REPEAT ; 转REPEA T,继续

MAIN ENDP

DECIBIN PROC NEAR ; 十进制数输入子程序

MOV BX, 0 ; BX保存输入数

NEWCHAR: MOV AH, 1

INT 21H ; 调用DOS功能输入字符

SUB AL, 30H ; 转为数0-9

JB EXIT ; 小于0,不是数字

CMP AL, 9D ; 与9比较

JA EXIT ; 大于,不是数字

CBW ; AL=>AX

XCHG AX, BX ; AX、BX互换

MOV CX, 10D ; CX=10

MUL CX ; AX=AX*CX

ADD BX, AX ; BX为前面输入的结果

JMP NEWCHAR

EXIT: RET

DECIBIN ENDP

BINIHEX PROC NEAR

MOV CH, 4 ; CH循环次数

ROTA TE: MOV CL, 4 ;每次循环输出一位十六进制数

ROL BX, CL ; 即移位4个二进制位

MOV AL, BL ; AL=BL

AND AL, 0FH ; 取低4位

ADD AL, 30H ; 转变为ASCII码

CMP AL, 3AH ; 是否为’0’-‘9’

JL PRINTIT ; 是转PRINTIT

ADD AL, 7H ; 否转为’A’-‘F’

PRINTIT: MOV DL, AL ; DL=输出字符

MOV AH, 2

INT 21H ;调用DOS中断,显示字符

DEC CH

JNZ ROTA TE ; 没循环结束,继续

RET ; 返回

BINIHEX ENDP

CRLF PROC NEAR ; 输出回车、换行

MOV DL, 0DH

MOV AH, 2

INT 21H ; 输出回车

MOV DL, 0AH MOV AH, 2

INT 21H ; 输出换行

RET

CRLF ENDP

DECIHEX ENDS

END MAIN


本文标签: 汇编语言 语言 寻址 过程 显示