汇编语言程序设计方法,简述用汇编语言进行程序设计的步骤。
汇编语言程序设计方法,简述用汇编语言进行程序设计的步骤。详细介绍
本文目录一览: 汇编语言程序设计步骤有那几步_汇编语言编程步骤有哪些
汇编语言程序设计步骤:
1、分析问题,抽象出描述问题的数据模型
2、确定问题的算法思想
3、画出流程图或结构图
4、分配存储器和工作单元(寄存器)
5、逐条编写程序
6、静态检查,上机调试例:编程查找考生的最高分,假设所有考生分数已存入计算机内存
1、分析问题根据条件、特点、规律→数学模型本例分数已给定为0~200之间的整数集合(考虑加试分),记为{S},找max{S}(注:简单问题不一定写数学模型)
2、确定算法思想最好利用现成算法和程序设计方法,若无,则需根据实践经验总结算法思想
如本例,从成绩单第一分数往下看,边看边比较,记住较高分,舍弃较低分,直至看完,最高分存于脑中
归纳算法思想:建立数据指针并指向数据区首地址
将第一数取入寄存器(如AL),与下一数比较,若下一数大则将其取入寄存器,否则调整指针,再与下一数比较,重复上述过程,直至比较完毕,寄存器中即最高分
读分数用MOV指令,比较用CMP指令,分析判断用条件转移指令
3、画流程图或结构图有逻辑流程、算法流程、程序流程等,复杂问题需画模块结构
本例简单,只画出程序流程图(用模块化结构的N-S流程图表示):本例的N-S流程图图中初始化包括:设一个计数器,将分数个数减一后送计数器,每比较一次减一,至零查找结束;建立一个指针指向数据区
开始初始化取第一数到寄存器与下一数比较下一数大?是否取大数到寄存器修改指针,计数次数减一返回到循环体开始,直到计数次数为0退出循环结束
4、分配存储器空间和工作单元(寄存器)定义数据段、堆栈段、代码段等
工作单元一般用寄存器
本例:分数放数据段,建100字节堆栈空间,BX作数据指针,CX作计数器,AL放最高分
5、逐条编写程序DATASEGMENTFENDB85,90,60,75,87,35,80,78,96,82;存分数MAXDB?;存最高分DATAENDSSTACKSEGMENTPARASTACK‘STACK’DB100DUP(?);100字节堆栈STACKENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKSTARTPROCFARPUSHDSMOVAX,0PUSHAX;为了返回DOSMOVAX,DATAMOVDS,AX;置数据段寄存器MOVBX,OFFSETFEN;置数据指针MOVCX,MAX-FEN;置计数器初值DECCX;N个分数比较N-1次MOVAL,[BX];取第一个分数LOP:INCBX;调整指针CMPAL,[BX];与下一数比较JAENEXT;大于等于则转MOVAL,[BX];否则取下一数NEXT:LOOPLOP;计数器减一,;不为零转LOPMOVMAX,AL;存放最高分RET;返回DOSSTARTENDPCODEENDSENDSTART6、静态检查,上机调试选用指令尽量字节少,使其执行速度快
易错处应重点查,如比较次数、转移条件等
确信无错后方可上机调试
程序汇编有哪两种方式
程序汇编有手工汇编和机器汇编这两种方式。
一、程序汇编
1、汇编程序是指把汇编语言书写的程序翻译成与之等价的机器语言程序的翻译程序。汇编程序输入的是用汇编语言书写的源程序,输出的是用机器语言表示的目标程序。汇编语言是为特定计算机或计算机系列设计的一种面向机器的语言,由汇编执行指令和汇编伪指令组成。
2、采用汇编语言编写程序虽不如高级程序设计语言简便、直观,但是汇编出的目标程序占用内存较少、运行效率较高,且能直接引用计算机的各种设备资源。它通常用于编写系统的核心部分程序,或编写需要耗费大量运行时间和实时性要求较高的程序段。
二、背景信息
1、汇编执行指令是机器指令的符号化表示,其操作码用记忆符表示,地址码直接用标号、变量名字、常数等表示。汇编执行指令经汇编程序翻译为机器指令,二者之间基本上保持一一对应的关系。
2、汇编伪指令又称作汇编指示,用于向汇编程序提供用户自定义的符号、数据的类型、数据空间的长度,以及目标程序的格式、存放位置等提示性信息,其作用是指示汇编程序如何进行汇编。
3、使用汇编语言编写的源代码,需要通过使用相应的汇编程序将它们转换成可执行的机器代码。这一过程被称为汇编过程。许多汇编程序可以识别代表地址和常量的标签(label)和符号(symbols),这样就可以用字符来代表操作数而无需采取写死的方式。
4、普遍地说,特定的汇编语言和特定的机器语言指令集是一一对应的。许多汇编程序为程序开发、汇编控制、辅助调试提供了额外的支持机制。有的汇编语言编程工具经常会提供宏,它们也被称为宏汇编器。
5、汇编语言不像其他大多数的程序设计语言一样被广泛用于程序设计;在实际应用中,它通常被应用在底层硬件操作和高要求的程序优化的场合。驱动程序、嵌入式操作系统和实时运行程序都需要汇编语言。
简述用汇编语言进行程序设计的步骤。
汇编语言程序设计步骤:
1、 分析问题,抽象出描述问题的数据模型
2、 确定问题的算法思想
3、 画出流程图或结构图
4、 分配存储器和工作单元(寄存器)
5、 逐条编写程序
6、 静态检查,上机调试
汇编语言程序设计步骤:
(1)分析问题:已知条件、要解决的问题、功能/性能要求等。
(2)建立数学模型:把问题数学化、公式化,便于计算机处理。
(3)确定算法:简单、速度快、精度高、代码量小、编程容易。
(4)绘制程序流程图:用箭头、框图、菱形图等表示程序结构。
(5)内存空间分配:为程序或数据分配内存空间。
(6)编制程序与静态检查:程序结构层次简单、清楚、易懂。
(7)程序调试:利用调试软件DEBUG进行调试。
MCS-51单片机,数据块传送程序设计,汇编语言如何设计?
将以 R2、R3 为首地址的源 RAM 区的 R6、R7 字节的数据
传送到以 R4、R5 为首地址的目的 RAM 区。
设定 R2、R3 所存储的源 RAM 首地址为 2000H(即 R2、R3 分别为 20H、00H),
R4、R5 所存储的目的 RAM 首地址为 4000H(即 R4、R5 分别为 40H、00H),
R6、R7 所存储 的字节数为 1FFFH(即 R6、R7 分别为 1FH、0FFH)。
---------------------
MOV R2,#20H
MOV R3,#00H
MOV R4,#40H
MOV R5,#00H
MOV R6,#1FH
MOV R7,#0FFH
LOOP:
MOV DPH,R2
MOV DPL,R3
MOVX A,@DPTR
INC DPTR
MOV R2,DPH
MOV R3,DPL
MOV DPH,R4
MOV DPL,R5
MOVX @DPTR,A
INC DPTR
MOV R4,DPH
MOV R5,DPL
DJNZ R7,LOOP
DJNZ R6,LOOP
SJMP $
END
汇编语言程序设计的一般步骤是什么?
一、 上机实验步骤注:以下步骤适用于除汇编语言程序设计的实验一到实验四外的所有实验(实验一到实验四仅使用TD.EXE)。1.确定源程序的存放目录建议源程序存放的目录名为ASM(或MASM),并放在C盘或D盘的根目录下。如果没有创建过此目录,请用如下方法创建:通过Windows的资源管理器找到C盘的根目录,在C盘的根目录窗口中点击右键,在弹出的菜单中选择“新建”→“文件夹”,并把新建的文件夹命名为ASM。请把MASM.EXE、LINK.EXE、DENUG.EXE和TD.EXE都拷贝到此目录中。2.建立ASM源程序建立ASM源程序可以使用EDIT或NOTEPAD(记事本)文本编辑器。下面的例子说明了用EDIT文本编辑器来建立ASM源程序的步骤(假定要建立的源程序名为HELLO.ASM),用NOTEPAD(记事本)建立ASM源程序的步骤与此类似。在Windows中点击桌面左下角的“开始”按钮→选择“运行”→在弹出的窗口中输入“EDIT.COM C:\ASM\HELLO.ASM”,屏幕上出现EDIT的编辑窗口窗口标题行显示了EDIT程序的完整路径名。紧接着标题行下面的是菜单行,窗口最下面一行是提示行。菜单可以用Alt键激活,然后用方向键选择菜单项,也可以直接用Alt-F打开File文件菜单,用Alt-E打开Edit编辑菜单,等等。如果键入EDIT命令时已带上了源程序文件名(C:\ASM\HELLO.ASM),在编辑窗口上部就会显示该文件名。如果在键入EDIT命令时未给出源程序文件名,则编辑窗口上会显示“UNTITLED1”,表示文件还没有名字,在这种情况下保存源程序文件时,EDIT会提示输入要保存的源程序的文件名。编辑窗口用于输入源程序。EDIT是一个全屏幕编辑程序,故可以使用方向键把光标定位到编辑窗口中的任何一个位置上。EDIT中的编辑键和功能键符合Windows的标准,这里不再赘述。源程序输入完毕后,用Alt-F打开File菜单,用其中的Save功能将文件存盘。如果在键入EDIT命令时未给出源程序文件名,则这时会弹出一个“Save as”窗口,在这个窗口中输入你想要保存的源程序的路径和文件名(本例中为C:\ASM\HELLO.ASM)。 注意,汇编语言源程序文件的扩展名最好起名为.ASM,这样能给后面的汇编和连接操作带来很大的方便。3.用MASM.EXE汇编源程序产生OBJ目标文件源文件HELLO.ASM建立后,要使用汇编程序对源程序文件汇编,汇编后产生二进制的目标文件(.OBJ文件)。具体操作如下: 方法一:在Windows中操作用资源管理器打开源程序目录C:\ASM,把HELLO.ASM拖到MASM.EXE程序图标上。 方法二:在DOS命令提示符窗口中操作选择“开始”→“程序”→“附件”→“命令提示符”,打开DOS命令提示符窗口,然后用CD命令转到源程序目录下,接着输入MASM命令:I:>C:
C:>CD \ASM
C:\ASM>MASM HELLO.ASM
不管用以上二个方法中的哪个方法,进入MASM程序后,都会提示让你输入目标文件名(Object filename),并在方括号中显示默认的目标文件名,建议输入目标文件的完整路径名,如:C:\ASM\HELLO.OBJ〈回车〉。后面的两个提示为可选项,直接按回车。注意,若打开MASM程序时未给出源程序名,则MASM程序会首先提示让你输入源程序文件名(Source filename),此时输入源程序文件名HELLO.ASM并回车,然后进行的操作与上面完全相同。如果没有错误,MASM就会在当前目录下建立一个HELLO.OBJ文件(名字与源文件名相同,只是扩展名不同)。如果源文件有错误,MASM会指出错误的行号和错误的原因。4.用LINK.EXE产生EXE可执行文件在上一步骤中,汇编程序产生的是二进制目标文件(OBJ文件),并不是可执行文件,要想使我们编制的程序能够运行,还必须用连接程序(LINK.EXE)把OBJ文件转换为可执行的EXE文件。具体操作如下: 方法一:在Windows中操作用资源管理器打开源程序目录C:\ASM,把HELLO.OBJ拖到LINK.EXE程序图标上。 方法二:在DOS命令提示符窗口中操作选择“开始”→“程序”→“附件”→“命令提示符”,打开DOS命令提示符窗口,然后用CD命令转到源程序目录下,接着输入LINK命令:I:>C:
C:>CD \ASM
C:\ASM>LINK HELLO.OBJ
不管用以上二个方法中的哪个方法,进入LINK程序后,都会提示让你输入可执行文件名(Run file),并在方括号中显示默认的可执行文件名,建议输入可执行文件的完整路径名,如:C:\ASM\HELLO.EXE〈回车〉。后面的两个提示为可选项,直接按回车。注意,若打开LINK程序时未给出OBJ文件名,则LINK程序会首先提示让你输入OBJ文件名(Object Modules),此时输入OBJ文件名HELLO.OBJ并回车,然后进行的操作与上面完全相同。如果没有错误,LINK就会建立一个HELLO.EXE文件。如果OBJ文件有错误,LINK会指出错误的原因。对于无堆栈警告(Warning:NO STACK segment)信息,可以不予理睬,它不影响程序的执行。如链接时有其它错误。须检查修改源程序,重新汇编、连接,直到正确。5.执行程序建立了HELLO.EXE文件后,就可以直接在DOS下运行此程序,如下所示:C:>HELLO〈回车〉C:>程序运行结束后,返回DOS。如果运行结果正确,那么程序运行结束时结果会直接显示在屏幕上。如果程序不显示结果,我们如何知道程序是否正确呢?例如,这里的HELLO.EXE程序并未显示出结果,所以我们不知道程序执行的结果是否正确。这时,我们就要使用TD.EXE调试工具来查看运行结果。此外,大部分程序必须经过调试阶段才能纠正程序执行中的错误,调试程序时也要使用TD.EXE。
汇编语言程序设计的基本步骤 了解了汇编语言指令的功能和用法,了解了汇编语言程序的编写格式,就可以编制完整的汇编语言程序了。一个程序通常具有顺序、分支、循环和子程序4种结构形式。顺序程序结构就是指完全按顺序逐条执行的指令序列。在程序设计过程中,顺序结构大量存在,屡见不鲜。但一个完整的程序只是逐条去执行指令,这非常少见。常见的程序结构,是上述4种结构的混合体。 一般来说,编制一个汇编语言程序的步骤如下: (1) 分析题意,确定算法或算法思想。 算法是指解决问题的方法和步骤。比如现有的一些计算方法和日常生活中解决问题的逻辑思维推理方法等。 (2) 根据算法画出流程图,简单的情况也可不画。 画出描述算法的流程图,可以首先从图上检验算法的正确性,减少出错的可能,使得动手编写程序时的思路更加清晰。 (3) 分配存储空间和工作单元,合理地使用寄存器。 分配存储空间和工作单元,是指存储空间的分段和数据定义。另外,由于寄存器的数量有限,编写程序时经常会感到寄存器不够用。因此,对于字节数据,要尽量使用8位寄存器。而采用适当的寻址方式,也会达到节省寄存器的目的。 (4) 根据流程图编写程序。 这是编制汇编语言程序最为重要的一步。算法里规定的功能,是要通过一条条指令描述出来的。为了提高编程能力,对于初学者,一是要多阅读现有的程序,以学习别人的编程经验;而更为重要的是,必须多亲自动手编写,不要怕失败,只有通过无数次失败,才能从中积累自己的编程经验。 (5) 上机调试运行程序。 通过汇编的源程序,只能说明它里面不存在语法错误。但是它是否能达到算法所要求的预期效果,还必须经过上机调试,用一些实验数据来测试,才能够真正地得出结论。可以这么说,即使是一个非常有经验的程序员,也没有百分之百的把握说他编写的程序一次就成功。 用流程图表示算法 流程图用一些图形框来代表各种操作。用图形表示算法,直观形象,可以用来帮助人们对算法的理解。下图给出了一些常用的流程图符号。
上图中的判断框(菱形)用来对一个给定的条件作出判断,以决定如何执行其后的操作。它有一个入口,两个出口,如下图(a)所示。
连接点(圆圈)是用来将画在不同地方的流程线连接起来。例如在下图(b)里,有两个圈里写着数字1的圆圈,它表示是从左边的1出来,进到右边图的1里(这由流程线的方向给出)。可以看出,这两个点其实就是同一个点,只是由于画不下而分开来画的。用连接点,可以避免流程图中的流程线相互交叉或过长,从而使流程图清晰。
注释框不是流程图中必需的部分。在流程图中使用它,是为了对流程图中的某些框的操作做一些必要的说明,以便使人们能够更好地通过流程图来理解算法。
处理框反映做些什么样的操作,如把某个单元的内容送入某个寄存器,从某个存储单元取出数据等。它是流程图里最为本质的、出现最多的图形框。
输入/输出框反映程序的输入和输出情况。计算机程序无外乎接收数据,进行处理,然后加以输出,所以输入/输出框是必不可少的。
回车>
回车>
回车>
回车>
回车>
回车>
单片机汇编语言设计程序的方法,步骤,思路?
首先你要有个总体的逻辑框架,然后写出你大致的程序框图,在在每一个环节上进行思考理解,理清头绪,把整个框图都完全理解明白以后,就开始进行写程序了,注意一些语句的用法哦,写完之后烧到开发板上,然后对程序进行调试,有错误就仔细的修改,调试应该说是最麻烦的工作,所以不要着急,慢慢来,等到你成功的时候你就有种说不出来的高兴了,祝你好运。
首先高清你的要设计什么,有什么要求,然后根据你设计的写出来程序框图,看看是否出现逻辑错误,根据程序框图编写程序,最后调试。总体就这样做就好了~!~!这个是最根本的办法,如果你认为你很强大的话可以直接根据要求直接写程序,但是这样做容易造成逻辑混乱最后都不好修改啊~!这个就是我的经验~!
汇编语言程序设计
一.
1. ADD BX,AX 或 ADD BL,AL ;类型配对
2. MOV AX,0A999H
3. MOV AX,0F8H
4. MOV AX,1234H 或 MOV AL,12H
5. MOV AX,[BX]
6. MOV DS,AX ;DS不能直接存立即数
7. ADD [BX],10 ;对的诶
8. PUSH AX ;push不能直接push立即数
9. IN AL,DX
10. OUT 40H ,AL
11. MUL AL ;mul不能直接跟立即数
12. MOV [DI],AX ;mov不能两个都是内存
13. ADD DI,AX
14. MOV DS,AX ;CS不可以改
15. SUB 10[SI],AX ;si di 不可以同时出现
二.
SUB [BP], BX 寄存器间接寻址方式;30400H;
MOV [BX+DI], SI 基址变址寻址方式;10400H;
ADD ES:[SI], DI 寄存器相对寻址方式;20200H;
MOV 10[BX], DI 寄存器相对寻址方式;10100H;
MOV DS:[100H], BX 相对基址变址寻址方式;10100H
三.
3456H;5678H;1234H;5678H;
四.
1234H;2468H;0008H;1008H;0804H;0408H;0508H;0508H
五.
01H,31H,0FFH,00H,78H,56H,FFH,FFH,00H,24H,00H,0BH,00H,0BH,19H,09H,09H
(从左往右地址变大)
AX=3101H,BX=0023H
六.
汇编语言是一种符号语言,他和机器语言几乎一一对应,但在书写中却是用有字符串组成的助记符
。。。。。。。
(希望对你有帮助)
自学汇编的路过~ 楼主,太不厚道了吧,这种东西要自己做的吧。 第一题:我看了前面几个,是两个操作数的位数对不上,不能这样用的··· 其他的 懒得看了,自己慢慢做吧,给五百分也懒得帮你做了,哪有这样的啊! 楼主好懒。
八位和十六位寄存器不能同时运算
一.
1.ADD BX,AX 或 ADD BL,AL ;类型配对
2.MOV AX,0A999H
3.MOV AX,0F8H
4.MOV AX,1234H 或 MOV AL,12H
5.MOV AX,[BX]
6.MOV DS,AX ;DS不能直接存立即数
7.ADD [BX],10 ;对
8.PUSH AX ;push不能直接push立即数
9.IN AL,DX
10.OUT 40H ,AL
11.MUL AL ;mul不能直接跟立即数
12.MOV [DI],AX ;mov不能两个都是内存
13.ADD DI,AX
14.MOV DS,AX ;CS不可以改
15.SUB 10[SI],AX ;si di 不可以同时出现
二.
SUB [BP], BX 寄存器间接寻址方式;30400H;
MOV [BX+DI], SI 基址变址寻址方式;10400H;
ADD ES:[SI], DI 寄存器相对寻址方式;20200H;
MOV 10[BX], DI 寄存器相对寻址方式;10100H;
MOV DS:[100H], BX 相对基址变址寻址方式;10100H
三.
3456H;5678H;1234H;5678H;
四.
1234H;2468H;0008H;1008H;0804H;0408H;0508H;0508H
五.
01H,31H,0FFH,00H,78H,56H,FFH,FFH,00H,24H,00H,0BH,00H,0BH,19H,09H,09H
(从左往右地址变大)
AX=3101H,BX=0023H
六.
1.
汇编语言:(AssemblyLanguage)是面向机器的程序设计语言。
汇编:把汇编语言翻译成机器语言的过程称为汇编。
汇编程序:把汇编语言书写的程序翻译成与之等价的机器语言程序的翻译程序。汇编程序输入的是用汇编语言书写的源程序,输出的是用机器语言表示的目标程序。汇编语言是为特定计算机或计算机系列设计的一种面向机器的语言,由汇编执行指令和汇编伪指令组成。采用汇编语言编写程序虽不如高级程序设计语言简便、直观,但是汇编出的目标程序占用内存较少、运行效率较高,且能直接引用计算机的各种设备资源。它通常用于编写系统的核心部分程序,或编写需要耗费大量运行时间和实时性要求较高的程序段。
2.
3.
单独cmpsb就是逐一比较8个位;加上rep,循环比较,还是比较这8位啊
4.
是指在计算机执行期间,系统内发生任何非寻常的或非预期的急需处理事件,使得CPU暂时中断当前正在执行的程序而转去执行相应的时间处理程序。待处理完毕后又返回原来被中断处继续执行或调度新的进程执行的过程。
5.
宏和子程序都是为了简化源程序的编写,提高程序的可维护性,但是它们二者之间存在着以下本质的区别:
1、在源程序中,通过书写宏名来引用宏,而子程序是通过CALL指令来调用;
2、汇编程序对宏通过宏扩展来加入其定义体,宏引用多少次,就相应扩展多少次,所以,引用宏不会缩短目标程序;而子程序代码在目标程序中只出现一次,调用子程序是执行同一程序段,因此,目标程序也得到相应的简化;
3、宏引用时,参数是通过“实参”替换“形参”的方式来实现传递的,参数形式灵活多样,而子程序调用时,参数是通过寄存器、堆栈或约定存储单元进行传递的;
4、宏引用语句扩展后,目标程序中就不再有宏引用语句,运行时,不会有额外的时间开销,而子程序的调用在目标程序中仍存在,子程序的调用和返回均需要时间。
总之,当程序片段不长,速度是关键因素时,可采用宏来简化源程序,但当程序片段较长,存储空间是关键因素时,可采用子程序的方法来简化源程序和目标程序。
七.
…………
在汇编语言程序设计中,主程序与子程序之间进行参数传递的方法有哪些
寄存器、
内存单元、
指针、
堆栈。
寄存器、栈、内存、文件。
汇编语言中主程序与子程序参数传递的方法有以下几种:
1.寄存器法
寄存器法就是将入口参数和出口参数存放在约定的寄存器中。
优点:数据传递书读快、编程较方便、节省内存单元。
缺点:当传递参数过多时候,由于寄存器个数有限,及寄存器的频繁使用,将导致寄存器不足。
适用:参数较少的子程序
2。约定单元法:
约定单元法顾名思义是吧入口参数和出口参数都放在事先约定好的单元中
优点:不占用寄存器、参数个数任意、每个子程序要处理的数据和送出的结构都有独立的存储单元
缺点:但用一定数量的存储单元,增加编程中对变量定义的难度
3.堆栈法
堆栈法是利用堆栈来传递参数的。
优点:参数不占用寄存器,和存储单元。参数存放在公共堆栈区,处理完后客恢复。参数个数一般不限
缺点:由于参数和子程序混杂在一起,存取参数时候必须小心计算它在堆栈中的位置。要注意断点的保存和恢复。
4.地址表法
这种方法是把参数组成的一张参数表放在某个存储区中,然后只要主程序和子程序约定好这个存储区的首地址和存放的内容,在主程序中将参数传递给地址表,在子程序中根据地址表给定的参数就可以完成操作。
汇编语言程序设计
这个bcd码采用的是8421格式?那么为什么会出现11呢?
; 本程序通过编译,运行正确。
; 压缩BCD相加,调整后,若高位有进位,则进位丢失。
Data Segment
abcd DB 11h,23h,30h,43h
BCD_Sum DB ' $'
Data Ends
Code Segment
Assume CS:Code,DS:Data
; ----------------------------------------------------------------------------
; 功能:显示指定地址(Str_Addr)的字符串
; 入口:
; Str_Addr=字符串地址(要求在数据段)
; 用法: Output Str_Addr
; 用法举例:Output PromptStr
Output MACRO Str_Addr
lea dx,Str_Addr
mov ah,9
int 21h
EndM
; ----------------------------------------------------------------------------
Start: mov ax,Data ;取数据段地址
push ax
pop ds ;赋给数据段寄存器ds
push ax
pop es ;赋给附加段寄存器es
; 压缩BCD码相加,先做无符号数加法,然后BCD码调整。加一次,调整一次。
lea si,abcd
cld
lodsb
mov cx,3
BCD_Add: add al,[si]
daa
inc si
loop BCD_Add
lea di,BCD_Sum
mov cx,4
; 转换成ASCII字符串
xor ah,ah ;将AH置0
shl ax,cl ;将AX左移4位
shr al,cl ;将AL右移4位
xchg ah,al ;交换AH、AL
call AL_ASCII ;调用子程序,将AL中的值转换成相应的ASCII码
xchg ah,al ;交换AH、AL
call AL_ASCII ;调用子程序,将AL中的值转换成相应的ASCII码
; 显示BCD相加和
Output BCD_Sum
Exit_Proc: mov ah,4ch ;结束程序
int 21h
; Subroutine 将AL中的二进制数转换成ASCII码
AL_ASCII Proc Near
cmp al,9 ;AL>9?
ja Letter ;AL>9,按大写字母处理
or al,30h ;AL<=9,按数字处理
jmp Save_Chr
ret
Letter: sub al,9 ;字母,AL减9
or al,40h ;转换成相应的大写字母
Save_Chr:
stosb ;保存转换完的字符
ret
AL_ASCII EndP
Code ENDS
END Start ;编译到此结束
汇编语言是一种什么程序设计语言?
汇编语言是用于电子计算机,微处理器,微控制器或其他可编程设备的低级语言,也称为符号语言。 在汇编语言中,助记符用于替换机器指令的操作码,并且使用地址或操作数代替指令或操作数的地址。
在不同的设备中,汇编语言对应于不同的机器语言指令集,这些指令集通过汇编过程转换为机器指令。 特定的汇编语言和特定的机器语言指令集是一一对应的,不能直接移植到不同的平台上。
由于汇编指令系统庞大,因此有必要构建一种指令系统,该指令系统具有大量指令,复杂的格式以及较差的存储空间。 指令中最难的部分是指令支持的寻址模式。 指令的本质是如何获取指令中的操作数。
(1)传送指令:
包括通用数据传送指令MOV、条件传送指令CMOVcc、堆栈操作指令PUSH/PUSHA/PUSHAD/POP/POPA/POPAD、交换指令XCHG/XLAT/BSWAP、地址或段描述符选择子传送指令LEA/LDS/LES/LFS/LGS/LSS等
(2)逻辑运算:
这部分指令用于执行算术和逻辑运算,包括加法指令ADD/ADC、减法指令SUB/SBB、加一指令INC、减一指令DEC、比较操作指令CMP等。
(3)移位指令:
这部分指令用于将寄存器或内存操作数移动指定的次数。包括逻辑左移指令SHL、逻辑右移指令SHR、算术左移指令SAL、算术右移指令SAR、循环左移指令ROL、循环右移指令ROR等。
但是,对于计算机的基本汇编语言而言,这种类型的寻址将涉及大量与复杂的存储管理方法密切相关的计算存储格式,因此很难理解。 最后,汇编指令还与标志的影响方式有关,但是处理器标志非常复杂,因此很难掌握该机制。
汇编语言是计算机提供给用户的最快,最高效的语言,并且是唯一可以利用计算机的所有硬件功能并直接控制硬件的语言。 但是,由于编写和调试汇编语言程序比高级语言复杂,因此它们的应用程序目前不如高级语言广泛。
寄存器可以理解为CPU中的存储器或者内存,是CPU中可以存储数据的器件,一个CPU中可以有多个寄存器。上述示例中的 AX 、BX 就是寄存器的代号。
汇编语言比机器语言更具可读性,但是汇编语言仍然比高级语言更不可读。 但是,用它编写的程序具有存储空间低和执行速度快的特性,并且不能用高级语言代替。 在实际应用中,汇编语言的使用取决于特定的应用程序要求,软件开发时间和质量。
汇编语言是依赖于计算机的低级的程序设计语言。
计算机真正能够理解的是低级语言,它专门用来控制硬件。汇编语言就是低级语言,直接描述/控制 CPU 的运行。如果你想了解 CPU 到底干了些什么,以及代码的运行步骤,就一定要学习汇编语言。
这些指令都是二进制的,称为操作码(opcode),比如加法指令就是00000011。编译器的作用,就是将高级语言写好的程序,翻译成一条条操作码。
对于人类来说,二进制程序是不可读的,根本看不出来机器干了什么。为了解决可读性的问题,以及偶尔的编辑需求,就诞生了汇编语言。
由于汇编更接近机器语言,能够直接对硬件进行操作,生成的程序与其他的语言相比具有更高的运行速度,占用更小的内存,因此在一些对于时效性要求很高的程序、许多大型程序的核心模块以及工业控制方面大量应用。
汇编语言是二进制指令的文本形式,与指令是一一对应的关系。比如,加法指令00000011写成汇编语言就是 ADD。只要还原成二进制,汇编语言就可以被 CPU 直接执行,所以它是最底层的低级语言。
汇编语言基础命令就只有“将信息从某处移到某处”和加、减等,都是幼儿园小孩能理解的计算。跳转命令分直接跳转和有条件跳转,总共加起来也没几个。
而且每个模块都很小,能写的内容非常有限。但在这么简陋的基础上,可以从最基础的传输信息、到用加法减法配合存储单元实现乘法除法等运算、再到更复杂的信息处理,可以说这个游戏在其设计范围内真的做到极致了。
学习汇编语言的好处:
可以自己编写出比较高级的程序,开始专精汇编分支的某一种比如51单片机,ARM,X86,懂得硬件基本构造和计算机逻辑电路和CPU原理。可以自己编写调试底层系统。可以汇编/反汇编,可以进行病毒的编写和调试和破译。移动端系统底层/电子产品/硬件基本系统熟练于心,可以进阶成一个真正的电子极客了。
汇编语言是一种最低级、最古老、不具有移植性的编程语言,它能够直接访问计算机硬件,所以执行效率极高,占用资源极少,一般用于嵌入式设备、驱动程序、实时应用、核心算法等。
汇编语言的缺点是开发周期特别长,实现一个简单的功能都非常麻烦,已经很少用来编写应用程序了。
因为汇编语言只是编译机器语言,所以它不能从根本上解决机器语言的特殊性。因此,汇编语言与机器本身的编程环境密切相关。很难推广和移植,但是它仍然保持了机器语言的出色执行。高效,由于其可读性和简单性,汇编语言仍然是常用的编程语言之一。
在学习之前,必须至少使用结构化的高级语言进行编程,例如Java,C,Python或C ++。您需要知道如何使用IF语句,数组和函数解决编程问题。
汇编语言与机器语言的关系:
不难看出机器语言作为一种编程语言, 灵活性较差可阅读性也很差,为了减轻机器语言带给软件工程师的不适应,人们对机器语言进行了升级和改进:用一些容易理解和记忆的字母,单词来代替一个特定的指令。
汇编语言包含用短助记符如 ADD、MOV、SUB 和 CALL 书写的语句。
汇编语言是最古老的编程语言,在所有的语言中,它与原生机器语言最为接近。它能直接访问计算机硬件,要求用户了解计算机架构和操作系统。汇编语言本身很简单,常用指令没几个,语法规则也不多,看几个小时资料似乎就明白了,但其实不然。汇编的背后是体系结构,是程序设计抛开各种高层形态的最根本,最本质的解释。
汇编语言本身很简单,常用指令没几个,语法规则也不多,看几个小时资料似乎就明白了,但其实不然。汇编的背后是体系结构,是程序设计抛开各种高层形态的最根本,最本质的解释。
汇编语言是一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。在汇编语言中,用助记符代替机器指令的操作码,用地址符号或标号代替指令或操作数的地址。
比起机器语言,汇编语言具有更高的机器相关性,更加便于记忆和书写,但又同时保留了机器语言高速度和高效率的特点。
汇编语言仍是面向机器的语言,很难从其代码上理解程序设计意图,设计出来的程序不易被移植,故不像其他大多数的高级计算机语言一样被广泛应用。所以在高级语言高度发展的今天,它通常被用在底层,通常是程序优化或硬件操作的场合。
扩展资料:
在许多程序的设计当中,高级语言和汇编语言可以相互交叉调用,进行参数传递,共享数据信息,这便是所谓的混合编程。
程序员往往在高级语言程序中直接嵌入汇编语句,以实现对硬件直接进行控制的功能,这是混合编程中常见的做法。也可以在高级语言程序中使用汇编语言中定义的变量和常量,或使用内部函数对汇编语句进行调用。
简而言之,这类混合编程的方法可以让高级语言与汇编语言互相取长补短,各自发挥各自优势,同时减少各自缺点所带来的不便,善用这个方法可以使开发和编程工作达到事半功倍的效果。