❶ 使用8086汇编语言编写程序 编写程序实现:将从键盘输入的小写字母转换成大写字母输出。 程序流程图,程序
data segment
chars db 200 p(?) ;开辟200字节的缓冲区
data ends
;---------------------------------
code segment
assume cs:code,ds:data
start :
push ds
mov ax,0
push ax
mov ax,data
mov ds,ax
lea bx ,chars
mov si,0
mov ch,0
;----------------------输入字符子程序
scanf:
mov ah,1
int 21h
cmp al,0dh
jz crt
cmp al,61h
jnb L1 ;al>='a'
mov [bx],al
inc bx
inc ch
jmp scanf
;--------------------------
;-----------------------输出字符
crt:
mov dl,chars[si]
mov ah,2
int 21h
inc si
dec ch
jz exit
jmp crt
;----------------------
exit:
mov ah,4ch
int 21h
;----------------------
L1:
cmp al,7ah ;al<='z'
jbe L2
mov [bx],al
inc bx
inc ch
jmp scanf
;---------------------
L2:
sub al,20h
mov [bx],al
inc bx
inc ch
jmp scanf
;---------------------
code ends
end start
或者
data segment
a db 'abcd$'
b db 'abcd$'
data ends
stack segment stack
db 200 p(?)
stack ends
code segment
assume cs:code,ds:data,ss:stack
a1 proc far
start:mov ax,data
mov ds,ax
mov cx,10
call upper
mov dx,offset b
mov ah,9h
int 21h
mov ah,4ch
int 21h
a1 endp
upper proc near
mov si,0
mov cx,4
l1: mov dl,a[si]
mov al,20h
sub dl,al
mov b[si],dl
inc si
loop l1
ret
upper endp
code ends
end start
❷ 汇编语言程序是什么
问题一:什么是汇编语言? 计算机程序设计语言的发展,经历了从机器语言、汇编语言到高级语言的历程。
1. 机器语言
电子计算机所使用的是由“0”和“1”组成的二进制数,二进制是计算机的语言的基础。计算机发明之初,人们只能降贵纡尊,用计算机的语言去命令计算机干这干那,一句话,就是写出一串串由“0”和“1”组成的指令序列交由计算机执行,这种语言,就是机器语言。使用机器语言是十分痛苦的,特别是在程序有错需要修改时,更是如此。而且,由于每台计算机的指令系统往往各不相同,所以,在一台计算机上执行的程序,要想在另一台计算机上执行,必须另编程序,造成了重复工作。但由于使用的是针对特定型号计算机的语言,故而运算效率是所有语言中最高的。机器语言,是第一代计算机语言。
2. 汇编语言
为了减轻使用机器语言编程的痛苦,人们进行了一种有益的改进:用一些简洁的英文字母、符号串来替代一个特定的指令的二进制串,比如,用“A D D”代表加法,“M O V”代表数据传递等等,这样一来,人们很容易读懂并理解程序在干什么,纠错及维护都变得方便了,这种程序设计语言就称为汇编语言,即第二代计算机语言。然而计算机是不认识这些符号的,这就需要一个专门的程序,专门负责将这些符号翻译成二进制数的机器语言,这种翻译程序被称为汇编程序。
汇编语言同样十分依赖于机器硬件,移植性不好,但效率仍十分高,针对计算机特定硬件而编制的汇编语言程序,能准确发挥计算机硬件的功能和特长,程序精炼而质量高,所以至今仍是一种常用而强有力的软件开发工具。
3. 高级语言
从最初与计算机交流的痛苦经历中,人们意识到,应该设计一种这样的语言,这种语言接近于数学语言或人的自然语言,同时又不依赖于计算机硬件,编出的程序能在所有机器上通用。经过努力,1 9 5 4年,第一个完全脱离机器硬件的高级语言―F O RT R A N问世了,4 0多年来,共有几百种高级语言出现,有重要意义的有几十种,影响较大、使用较普遍的有F O RT R A N、A L G O L、C O B O L、B A S I C、L I S P、S N O B O L、P L / 1、P a s c a l、C、P R O L O G、A d a、C + +、V C、V B、D e l p h i、J AVA 等。
高级语言的发展也经历了从早期语言到结构化程序设计语言,从面向过程到非过程化程序语言的过程。相应地,软件的开发也由最初的个体手工作坊式的封闭式生产,发展为产业化、流水线式的工业化生产。
6 0年代中后期,软件越来越多,规模越来越大,而软件的生产基本上是人自为战,缺乏科学规范的系统规划与测试、评估标准,其恶果是大批耗费巨资建立起来的软件系统,由于含有错误而无法使用,甚至带来巨大损失,软件给人的感觉是越来越不可靠,以致几乎没有不出错的软件。这一切,极大地震动了计算机界,史称“软件危机”。人们认识到:大型程序的编制不同于写小程序,它应该是一项新的技术,应该像处理工程一样处理软件研制的全过程。程序的设计应易于保证正确性,也便于验证正确性。1 9 6 9年,提出了结构化程序设计方法,1 9 7 0年,第一个结构化程序设计语言―P a s c a l语言出现,标志着结构化程序设计时期的开始。
8 0年代初开始,在软件设计思想上,又产生了一次革命,其成果就是面向对象的程序设计。在此之前的高级语言,几乎都是面向过程的,程序的执行是流水线似的,在一个模块被执行完成前,人们不能干别的事,也无法动态地改变程序的执行方向。这和人们日常处理事物的......>>
问题二:什么是汇编语言 汇编语言它是计算机语言,计算机语言说通俗点就是人类与计算机(CPU)沟通的桥梁,计算机它不认识人类的语言,听不懂也读不懂,要让计算机替我们去完成我们的工作,就需要我们将要交给计算机完成的任务翻译为计算机语言。汇编语言是各种语言中的一种,它属于低级的计算机语言,这是相对于面向过程的C语言,以及面向对象的C++,java而言。它是除机器语言以外最接近硬件的计算机语言,而且可以通过学习汇编语言深入的了解操作系统的底层运行机制,并以CPU的角度思考问题。这样可以让你在编写高级语言的程序的时候避免很多错误,并且能更深入理解高级语言的执行 原理。因为汇编语言属于低级语言,所以既然低级就肯定不容易被普通用户认识,这需要一定的硬件基础知识和一些计算机工作原理的知识。以前在大学阶段学过汇编语言,但没有当回事儿,连作业都是复制加粘贴完成的(像这样的不在少数吧:))。工作以后才发现这个语言是个好东西,它其实是个非常重要的基础课程。所以现在有时间就把书打开多看一点,学一点。汇编语言目前常见的有两种:一个是基于8086/88架构的DOS下的16位汇编语言,还有就是基于80386架构及其以后型号的windows下32位汇编语言。我不知道linux下有没有汇编语言。顺便说一下,不管什么汇编语言它所编出来的程序都属于软件,所以不管什么软件都需要依赖操作系统这个基础平台,它才可以被硬件CPU所执行,因为操作系统就是提供硬件与用户之间的接口,所有软件都要通过它来分配到硬件资源(不知道对不对哈:)才可以被执行)。一般先学习16位的DOS汇编,然后再学32位的windows汇编。所以我们先谈谈16位的DOS汇编哈。要学汇编语言首先就是要了解CPU,你只有了解了CPU才能了解汇编语言的执行,因为它基本就是直接在操作CPU的各个组成单元(像寄存器)。在 *** 上找了这个图,如下:上面这个CPU的逻辑结构图是8088的,8088和8086大的架构差不多,所以就以这个为例介绍下各个组成部分的作用。主寄存器:AX(AH,AL)累加寄存器,一般用作暂存数据;BX(BH,BL)基址寄存器,一般用作偏移地址存放;CX(CH,CL)计数寄存器,一般用在循环控制次数;DX(DH,DL)数据寄存器,好像和AX差不多吧;SP堆栈指针寄存器,栈指针;BP基址指针寄存器,可作SP使用;SI源变址寄存器和DI目的变址寄存器,这两个做为BX扩展用于偏移地址存放。段寄存器: CS:代码段寄存器,任何一个程序都是从代码段开始执行的,CS寄存器指明了代码段的段地址。DS:数据段寄存器,存放程序中数据部分的段地址。SS:堆栈段寄存器,堆栈是内存中特殊的内存块,堆与栈不同,目前我只知道栈是尊循“先进后出,后进先出”的原则而使用。ES:附加段寄存器,应该是作为DS数据段寄存器的扩充吧。地址加法器: 这是用在对内存寻址时所使用,它通过将段寄存器中的段地址与BX、SI、DI等寄存器中的偏移地址作一定处理从而输出物理地址,然后就可以访问内存单元了。汇编程序中的地址只是逻辑地址,并不是真实的内存上的地址。在程序实际运行时每次访问内存都会先将逻辑地址转换成物理地址才可以访问到物理内存。关于CPU寻址,逻辑地址,物理地址我也会再写篇文章来讨论。逻辑运算单元和控制单元:这是CPU最核心的单元,我们暂只记住它们是负责执行与控制就好了。内部数据,地址总线:CPU内部各部件之间通信的通道。外部地址总线:用来传输CPU想要读取/写入内存单元的物理地址。它的宽度就决定了CPU能够访问的内存的最大容量。外部数据和控制总......>>
问题三:简述用汇编语言进行程序设计的步骤。 汇编语言程序设计步骤:
(1)分析问题:已知条件、要解决的问题、功能/性能要求等。
(2)建立数学模型:把问题数学化、公式化,便于计算机处理。
(3)确定算法:简单、速度快、精度高、代码量小、编程容易。
(4)绘制程序流程图:用箭头、框图、菱形图等表示程序结构。
(5)内存空间分配:为程序或数据分配内存空间。
(6)编制程序与静态检查:程序结构层次简单、清楚、易懂。
(7)程序调试:利用调试软件DEBUG进行调试。
问题四:1、汇编程序与汇编语言源程序的区别? 汇编程序是汇编语言源程序经过编译后的结果
用标号是为了标记程序段,内存段,跳转位置等等
loop p ov add1可以
问题五:编程语言和汇编语言有什么区别啊 计算机语言从低级到高级可以分为:
机器语言,即由0、1组成的机器硬件可以识别的语言;
低级语言,即汇编语言
中级语言,如C语言
高级语言,如C++,JAVA,C#等。
汇编语言是将由0、1组成的机器语言用具有简单语义的英文代码表示,以便于理解和程序员编程。汇编语言通常用于对硬件的直接操控。由于汇编语言编写的程序很小,所以通常在程序中最核心的、控制硬件的代码可以采用汇编语言编写,一方面是安全,另一方面提高运行速度。
对于计算机的初学者,应该从中高级语言学起,如c语言,vb,java等,如果你是想要学习如何编程,学习一到两门高级语言已经够用了。
如果你已经掌握了基本的编程技能,最好是可以学习数据结构和操作系统以及计算机硬件的基本工作原理,以便优化你编写的程序,提高安全性和运行效率。
如果你想要从事更高级的开发工作,则可能需要学习汇编语言。
在高校中,计算机科技专业的学生汇编语言是必修课,而软件工程专业的学生则对汇编语言不做要求。
至于汇编与编程的区别是显而易见的,汇编语言是一种用于编写某些程序的语言。而编程则是程序员用某种语言编写程序的过程。
问题六:汇编语言是什么扩展名 .ASM的扩展名
问题七:汇编语言程序的开发有哪4个步骤 编辑:使用记事本,生成:*.ASM 文件。 编译:使用 MASM.EXE ,生成:*.OBJ 文件。 连接:使用 LINK.EXE,生成:*.EXE 文件。 执行:使用 *.EXE 文件。
问题八:汇编语言子程序是如何定义的? 直接jmp跳转过去,然后ret回来。
call xxx
xxx proc uses eax,esi,edi,var:ddword......
xxx endp
也可以带参数的。第二种方式格式就是这样,说白了也是jmp跳转。只是经过了编译器优化。防止程序员跳转,导致堆栈前后不对齐。
问题九:汇编语言有什么特点 汇编语言的总体特点1.机器相关性
这是一种面向机器的低级语言,通常是为特定的计算机或系列计算机专门设计的。因为是机器指令的符号化表示,故不同的机器就有不同的汇编语言。使用汇编语言能面向机器并较好地发挥机器的特性,得到质量较高的程序。
2.高速度和高效率
汇编语言保持了机器语言的优点,具有直接和简捷的特点,可有效地访问、控制计算机的各种硬件设备,如磁盘、存储器、CPU、I/O端口等,且占用内存少,执行速度快,是高效的程序设计语言。
3.编写和调试的复杂性
由于是直接控制硬件,且简单的任务也需要很多汇编语言语句,因此在进行程序设计时必须面面俱到,需要考虑到一切可能的问题,合理调配和使用各种软、硬件资源。这样,就不可避免地加重了程序员的负担。与此相同,在程序调试时,一旦程序的运行出了问题,就很难发现。
优点
1、因为用汇编语言设计的程序最终被转换成机器指令,故能够保持机器语言的一致性,直接、简捷,并能像机器指令一样访问、控制计算机的各种硬件设备,如磁盘、存储器、CPU、I/O端口等。使用汇编语言,可以访问所有能够被访问的软、硬件资源。
2、目标代码简短,占用内存少,执行速度快,是高效的程序设计语言,经常与高级语言配合使用,以改善程序的执行速度和效率,弥补高级语言在硬件控制方面的不足,应用十分广泛。
缺点
1、汇编语言是面向机器的,处于整个计算机语言层次结构的底层,故被视为一种低级语言,通常是为特定的计算机或系列计算机专门设计的。不同的处理器有不同的汇编语言语法和编译器,编译的程序无法在不同的处理器上执行,缺乏可移植性;
2、难于从汇编语言代码上理解程序设计意图,可维护性差,即使是完成简单的工作也需要大量的汇编语言代码,很容易产生bug,难于调试;
3、使用汇编语言必须对某种处理器非常了解,而且只能针对特定的体系结构和处理器进行优化,开发效率很低,周期长且单调。
问题十:微程序和汇编语言的区别是什么。 5分 微代码和汇编都是低级语言,但是微代码比汇编更底层。微代码和汇编都和硬件有着紧密的联系,但是对于同一产品系列的不同代产品来说,汇编可以完全相同,微代码可能有着巨大的区别,因为微代码是完全依赖于芯片内部的硬件连接。
对于同样一句C语言,在不同的处理器上会生成不同的汇编语言。每一条汇编语言的执行时间也许是一个或者两个时钟周期,甚至更多。微代码和汇编的关系,就像C 与汇编的关系,也就是说一条汇编也许会生成一条或多条微代码。所谓微代码,或者微指令,是处理器内部最小的操作原语,控制着诸如门电路(gates)开关等专门动作,和组成一条指令的微操作的序列。例如,对于一个加法ADD的简单动作,微代码可以决定接受哪两个寄存器或总线为输入,输出到什么总线或者寄存器里,标志寄存器要保存还是丢弃,根据条件进行跳转或者直接执行下一条微代码。一个内部只有8位宽的数据总线完全可以支持32位整数的汇编操作,就是因为有微代码。
微代码原来只是用来开发计算机的逻辑控制。古老的CPU往往都是“硬连线”,每个机器指令(加法,移动)都是由电路实现,虽然有着高性能的优点,但随着指令复杂度的增长,也带来了研发和DEBUG的困难,以及电路的复杂性。微代码的出现让CPU的设计者可以通过写一个微程序的方式来实现一条机器指令,而不是设计电路来实现它。在将来的开发设计过程中,微代码可以很容易地改变,硬件电路却不可更改,否则带来的将是巨大的商业损失。这种灵活的CPU设计导致了今天日益复杂的指令集。
❸ 汇编语言程序设计流程图
❹ 汇编语言程序设计的一般步骤是什么
一、 上机实验步骤注:以下步骤适用于除汇编语言程序设计的实验一到实验四外的所有实验(实验一到实验四仅使用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 Moles),此时输入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。