单片机汇编指令入门学习和查看
如果不用MS、IBM的子程序,这日子真是没法过了(关于功能调用详见《电脑爱好者》98年11期)。 编写汇编语言有两种主要的方法:1.使用MASM或TASM等编译器;2.使用除错程序DEBUG.COM。DEBUG其实并不能算是一个编译器,它的主要用途在于除错,即修正汇编程序中的错误。不过,也可以用来写短的汇编程序,尤其对初学者而言,DEBUG 更是最佳的入门工具。因为DEBUG操作容易:只要键入DEBUG回车,A回车即可进行汇编,过程简单,而使用编译器时,必须用到文本编辑器、编译器本身、LINK以及EXE2BIN等程序,其中每一个程序都必须用到一系列相当复杂的命令才能工作,而且用编译器处理源程序,必须加入许多与指令语句无关的指示性语句,以供编译器识别,使用 DEBUG 可以避免一开始就碰到许多难以理解的程序行。DEBUG 除了能够汇编程序之外,还可用来检查和修改内存位置、载入储存和执行程序、以及检查和修改寄存器,换句话说,DEBUG是为了让我们接触硬件而设计的。(8086常用指令用法将在每个汇编程序中讲解,限于篇幅,不可能将所有指令列出)。 DEBUG的的A命令可以汇编出简单的COM文件,所以DEBUG编写的程序一定要由地址 100h(COM文件要求)开始才合法。FOLLOW ME,SETP BY SETP(步步回车): 输入 A100 ; 从DS:100开始汇编 2.输入 MOV DL,1 ; 将数值 01h 装入 DL 寄存器 3.输入 MOV AH,2 ; 将数值 02h 装入 DL 寄存器 4.输入 INT 21 ; 调用DOS 21号中断2号功能,用来逐个显示装入DL的字符 5.输入 INT 20 ; 调用DOS 20号中断,终止程序,将控制权交回给 DEBUG 6.请按 Enter 键 7.现在已将汇编语言程序放入内存中了,输入 G(运行) 8.出现结果:输出一个符号。 ㄖ ←输出结果其实不是它,因WORD97无法显示原结果,故找一赝品将就着。 Program terminated normally 我们可以用U命令将十六进制的机器码反汇编(Unassemble)成汇编指令。你将发现每一行右边的汇编指令就是被汇编成相应的机器码,而8086实际上就是以机器码来执行程序。 1.输入 U100,106 1FED:0100 B201 MOV DL,01 1FED:0102 B402 MOV AH,02 1FED:0104 CD21 INT 21 1FED:0106 CD20 INT 20 DEBUG可以用R命令来查看、改变寄存器内容。CS:IP寄存器,保存了将执行指令地址。 1.输入R AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=1FED ES=1FED SS=1FED CS=1FED IP=0100 NV UP EI PL NZ NA PO NC 1FED:0100 B201 MOV DL,01 当程序由DS:100开始执行,那么终止程序时,DEBUG会自动将IP内容重新设定为100。当你要将此程序做成一个独立的可执行文件,则可以用N命令对该程序命名。但一定要为COM文件,否则无法以DEBUG载入。 输入N SMILE.COM ;我们得告诉DEBUG程序长度:程序从100开始到106,故占用7 ;字节。我们利用BX存放长度值高位部分,而以CX存放低位部分。 2.输入RBX ;查看 BX 寄存器的内容,本程序只有7个字节,故本步可省略 3.输入 RCX ;查看 CX 寄存器的内容 4.输入 7 ;程序的字节数 5.输入 W ;用W命令将该程序写入(Write)磁盘中 修行至此,我们便可以真正接触8086汇编指令了。当我们写汇编语言程序的时候,通常不会直接将机器码放入内存中,而是打入一串助记符号(Mnemonic Symbols),这些符号比十六进制机器码更容易记住,此之谓汇编指令。助记符号,告诉CPU应执行何种运算。也就是说,助忆符号所构成的汇编语言是为人设计的,而机器语言是对PC设计的。 现在,我们再来剖析一个可以将所有ASCII码显示出来的程序。 1. 输入 DEBUG 2. 输入 A100 3.输入 MOV CX,0100 ;装入循环次数 MOV DL,00 ;装入第一个ASCII码,随后每次循环装入新码 MOV AH,02 INT 21 INC DL ;INC:递增指令,每次将数据寄存器 DL 内的数值加 1 LOOP 0105 ;LOOP:循环指令,每执行一次LOOP,CX值减1,并跳 ;到循环的起始地址105,直到CX为0,循环停止 INT 20 4.输入 G即可显示所有ASCII码 当我们想任意显示字符串,如:UNDERSTAND?,则可以使用DOS21H号中断9H号功能。输入下行程序,存盘并执行看看: 1.输入 A100 MOV DX,109 ;DS:DX = 字符串的起始地址 MOV AH,9 ;DOS的09h功能调用 INT 21 ;字符串输出 INT 20 DB UNDERSTAND?$;定义字符串 在汇编语言中,有两种不同的指令:1.正规指令:如 MOV 等,是属于CPU的指令,用来告诉CPU在程序执行时应做些什么,所以它会以运算码(OP-code)的方式存入内存中;2.伪指令:如DB等,是属于DEBUG等编译器的指令,用来告诉编译器在编译时应做些什么。DB(Def
单片机汇编指令入门学 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)