单片机汇编指令入门学习和查看
编译后的二进制结果,它还无法被 DOS载入内存中加以执行,必须加以链结(Linking)。以LINK将OBJ文件(SMILE.OBJ)链结成 EXE 文件(SMILE.EXE)时,。 1.输入 LINK SMILE ←不用附加名OBJ Microsoft (R) Overlay Linker Version 3.64 Copyright (C) Microsoft Corp 1981, 1988. All rights reserved. Run File [SMILE.EXE]: ← 是否改动输出EXE文件名,如不改就ENTER List File [NUL.MAP]: ← 是否需要列表文件(MAP),不需要则ENTER Libraries [.LIB]: ←是否需要库文件,要就键入文件名,不要则ENTER LINK : warning L4021: no stack segment← 由于COM文件不使用堆栈段,所以错误信息 ←"no stack segment"并不影响程序正常执行 至此已经生成EXE文件,我们还须使用EXE2BIN 将EXE文件(SMILE.EXE),转换成COM文件(SMILE.COM)。输入EXE2BIN SMILE产生 BIN 文件(SMILE.BIN)。其实 BIN 文件与 COM 文件是完全相同的,但由于DOS只认COM、EXE及BAT文件,所以BIN文件无法被正确执行,改名或直接输入 EXE2BIN SMILE SMILE.COM即可。现在,磁盘上应该有 SMILE.COM 文件了,你只要在提示符号C:>下,直接输入文件名称 SMILE ,就可以执行这个程序了。 你是否觉得用编译器产生程序的方法,比 DEBUG 麻烦多了!以小程序而言,的确是如此,但对于较大的程序,你就会发现其优点了。我们再将ASCII程序以编译器方式再做一次,看看有无差异。首先,用EDIT.COM建立 ASCII.ASM 文件。 prognam segment ;定义段 assume cs:prognam ;把上面定义段的段基址放入 CS mov cx,100h ; 装入循环次数 mov dl,0 ; 装入第一个ASCII码,随后每次循环装入新码 next: mov ah,2 int 21h inc dl ;INC:递增指令,每次将数据寄存器 DL 内的数值加 1 loop next ; 循环指令,执行一次,CX减1,直到CX为0,循环停止 int 20h prognam ends ;段终止 end ;汇编终止 在汇编语言的源程序中,每一个程序行都包含三项元素: start: mov dl,1 ;装入第一个ASCII码,随后每次循环装入新码 标识符 表达式 注解 在原始文件中加上注解可使程序更易理解,便于以后参考。每行注解以“;”与程序行分离。编译器对注解不予理会,注解的数据不会出现在OBJ、EXE或COM文件中。由于我们在写源程序时,并不知道每一程序行的地址,所以必须以符号名称来代表相对地址,称为“标识符”。我们通常在适当行的适当位置上,键入标识符。标识符(label)最长可达31 个字节,因此我们在程序中,尽量以简洁的文字做为标识符。现在,你可以将此ASCII.ASM 文件编译成 ASCII.COM 了。1.MASM ASCII,2.LINK ASCII,3.EXE2BIN ASCII ASCII.COM。 注意:当你以编译器汇编你设计的程序时,常会发生打字错误、标识符名称拼错、十六进制数少了h、逻辑错误等。汇编老手常给新人的忠告是:最好料到自己所写的程序一定会有些错误(别人告诉我的);如果第一次执行程序后,就得到期望的结果,你最好还是在检查一遍,因为它可能是错的。原则上,只要大体的逻辑架构正确,查找程序中错误的过程,与写程序本身相比甚至更有意思。写大程序时,最好能分成许多模块,如此可使程序本身的目的较单纯,易于撰写与查错,另外也可让程序中不同部份之间的界限较清楚,节省编译的时间。如果读程序有读不懂的地方最好用纸笔记下有关寄存器、内存等内容,在纸上慢慢比划,就豁然开朗了。 下面我们将写一个能从键盘取得一个十进制的数值,并将其转换成十六进制数值而显示于屏幕上的“大程序”。前言:要让8086执行这样的功能,我们必须先将此问题分解成一连串的步骤,称为程序规划。首先,以流程图的方式,来确保整个程序在逻辑上没有问题(不用说了吧!什么语言都要有此步骤)。这种模块化的规划方式,称之为“由上而下的程序规划”。而在真正写程序时,却是从最小的单位模块(子程序)开始,当每个模块都完成之后,再合并成大程序;这种大处著眼,小处著手的方式称为“由下而上的程序设计”。 我们的第一个模块是BINIHEX,其主要用途是从8086的BX寄存器中取出二进制数,并以十六进制方式显示在屏幕上。注意:子程序如不能独立运行,实属正常。 binihex segment assume cs:binihex mov ch,4 ;记录转换后的十六进制位数(四位) rotate: mov cl,4 ;利用CL当计数器,记录寄存器数位移动次数 rol bx,cl ;循环寄存器BX的内容,以便依序处理4个十六进制数 mov al,bl ;把bx低八位bl内数据转移至al
单片机汇编指令入门学 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)