当前位置:首页 » 编程软件 » 汇编编程

汇编编程

发布时间: 2022-01-24 02:58:46

‘壹’ 汇编语言编程

汇编语言中EAX 与 EBX 相乘movx,eax;EAX 的值送入 X寄存器register是 CPU 中被命名的存储位置,用于保存操作的中间结果。这个例子的重点不是说明 C++ 与汇编语言哪个更好,而是展示它们的关系。汇编语言可移植吗。一种语言,如果它的源程序能够在各种各样的计算机系统中进行编译和运行,那么这种语言被称为是可移植的portable。例如,一个 C++ 程序,除非需要特别引用某种操作系统的库函数,否则它就几乎可以在任何一台计算机上编译和运行。java 语言的一大特点就是,其编译好的程序几乎能在所有计算机系统中运行。汇编语言不是可移植的,因为它是为特定处理器系列设计的。目前广泛使用的有多种不同的汇编语言,每一种都基于一个处理器系列。对于一些广为人知的处理器系列,汇编语言指令会直接与该计算机体系结构相匹配,或者在执行时用一种被称为微代码解释器的处理器内置程序来进行转换。为什么要学习汇编语言。

‘贰’ 汇编和编程有什么区别啊

总而言之,编程是一种行为,汇编(语言)是一种工具

■什么是汇编语言

汇编语言(Assembly Language)是面向机器的程序设计语言。

在汇编语合中,用助记符(Memoni)代替操作码,用地址符号(Symbol)或标号(Label)代替地址妈。这样用符号代替机器语盲的二进制码,就把机器语音变成了汇编语言。于是汇编语言亦称为符号语言。

使用汇编语言编写的程序,机器个能直接识别,要由一种程序将汇编语言翻译成机器语言,这种起翻译作用的程序叫汇编程序,汇编程序是系统软件中语言处理系统软件。汇编语言把汇编程序翻译成机器语言的过程称为f汇编。

汇编语言比机器语言易于读写、易于调试和修改,同时也具有机器语言执行速度快,占内存空间少等优点,但在编写复杂程序时具有明显的局限性,汇编语言依赖于具体的机型,不能通用,也不能在不同机型之间移植。

■对于不同型号的计算机,有着不同的结构的汇编语言

汇编语言由于采用了助记符号来编写程序,比用机器语言的二进制代码编程要方便些,在一定程度上简化了编程过程。汇编语言的特点是用符号代替了机器指令代码,而且助记符与指令代码一一对应,基本保留了机器语言的灵活性。使用汇编语言能面向机器并较好地发挥机器的特性,得到质量较高的程序。

汇编语言是面向具体机型的,它离不开具体计算机的指令系统,因此,对于不同型号的计算机,有着不同的结构的汇编语言,而且,对于同一问题所编制的汇编语言程序在不同种类的计算机间是互不相通的。

汇编语言中由于使用了助记符号,用汇编语言编制的程序输入计算机,计算机不能象用机器语言编写的程序一样直接识别和执行,必须通过预先放入计算机的"汇编程序"的加工和翻译,才能变成能够被计算机识别和处理的二进制代码程序。用汇编语言等非机器语言书写好的符号程序称为源程序,运行时汇编程序要将源程序翻译成目标程序。目标程序是机器语言程序,它一经被安置在内存的预定位置上,就能被计算机的CPU处理和执行。

汇编语言像机器指令一样,是硬件操作的控制信息,因而仍然是面向机器的语言,使用起来还是比较繁琐费时,通用性也差。但是,汇编语言用来编制系统软件和过程控制软件,其目标程序占用内存空间少,运行速度快,有着高级语言不可替代的用途。

目前通用的编程语言有两种形式:汇编语言和高级语言。

汇编语言的实质和机器语言是相同的,都是直接对硬件操作,只不过指令采用了英文缩写的标识符,更容易识别和记忆。它同样需要编程者将每一步具体的操作用命令的形式写出来。

汇编程序的每一句指令只能对应实际操作过程中的一个很细微的动作,例如移动、自增,因此汇编源程序一般比较冗长、复杂、容易出错,而且使用汇编语言编程需要有更多的计算机专业知识,但汇编语言的优点也是显而易见的,用汇编语言所能完成的操作不是一般高级语言所能实现的,而且源程序经汇编生成的可执行文件不仅比较小,而且执行速度很快。

简单的说,编程就是为了借助于计算机来达到某一目的或解决某个问题,而使用某种程序设计语言编写程序代码,并最终得到结果的过程。

‘叁’ 汇编语言编程

CODESEGMENT
ASSUMECS:CODE
ORG100H
START:JMPBEGIN
XDW2345
YDW789
ZDW?
BEGIN:
PUSHCS
POPDS
PUSHCS
POPES
MOVAX,X
CMPAX,Y
JL@1
SUBAX,Y
MOVZ,AX
JMP@2
@1:
MOVAX,Y
MOVDX,0
MOVBX,X
DIVBX
MOVZ,AX
@2:
MOVAX,Z
CALLDISPAX
MOVAH,4CH
INT21H
;=================================================
DISPAXPROCNEAR
;以10进制数形式显示,要显示的值事先存AX中
PUSHBX
PUSHCX
PUSHDX
PUSHSI
PUSHDS
PUSHCS
POPDS
JMPNUMDEF
DIVARRDW10000,1000,100,10,1
NZDB0
NUMDEF:
MOVBYTEPTRNZ,0
PUSHAX
LEASI,DIVARR
MOVCX,5
DISP1:
POPAX
MOVDX,0
MOVBX,[SI]
DIVBX
PUSHDX
CMPAL,0
JNEDISP2
CMPBYTEPTRNZ,1
JEDISP2
CMPCX,1
JEDISP2
MOVDL,20H
JMPDISP3
DISP2:
ADDAL,30H
MOVDL,AL
MOVBYTEPTRNZ,1
DISP3:
MOVAH,2
INT21H
INCSI
INCSI
LOOPDISP1
POPDX
POPDS
POPSI
POPDX
POPCX
POPBX
RET
DISPAXENDP
;==========================================
CODEENDS
ENDSTART

‘肆’ 汇编编程

data segment
string db 'Today is Sunday & July 16,2000$'
data ends
stack segment stack
db 200 p(0)
stack ends
code segment
assume cs:code,ds:data,ss:stack
main proc far
start
push bx
push dx
push si
push cx

lea dx,string
mov ah,9
int 21h
lea si,buf
dec si
loop: inc si
cmp '&',[si]
jnz loop
mov [si],'/'

lea dx,string
mov ah,9
int 21h
main endp
code ends
end start

‘伍’ 用汇编语言编程

CODESEGMENT
ASSUMECS:CODE

BUFDB50DUP(?)
BUF1DB50DUP(?)

START:PUSHCS
POPDS
PUSHCS
POPES
;==============随机生成50个数
LEADI,BUF
MOVCX,50
CLD
@1:
CALLRAND
STOSB
MOVAX,2
CALLDELAY_PROC
LOOP@1
;===============输出这50个数
CALLLFCR
LEASI,BUF
MOVCX,50
CLD
@11:
LODSB
CALLDSPAL
LOOP@11

;================转为bcd码保存
LEASI,BUF
LEADI,BUF1
MOVCX,50
CLD
@2:
LODSB
MOVAH,0
MOVBL,10
DIVBL
SHLAL,4
ADDAL,AH
STOSB
LOOP@2
;===============输出bcd数
CALLLFCR
LEASI,BUF1
MOVCX,50
CLD
@3:
MOVAX,CX
MOVBL,10
DIVBL
ORAH,AH
JNE@4
CALLLFCR
@4:
LODSB
RORAL,4
PUSHAX
MOVDL,AL
ANDDL,0FH
ORDL,30H
MOVAH,2
INT21H
POPAX
RORAL,4
MOVDL,AL
ANDDL,0FH
ORDL,30H
MOVAH,2
INT21H
MOVDL,'H'
INT21H
MOVDL,32
INT21H
LOOP@3

MOVAH,4CH
INT21H

;===============================================================
DELAY_PROCPROCNEAR;延迟子程式,延迟ax/18秒
PUSHES
PUSHDX
MOVDX,40H
MOVES,DX
MOVDX,ES:[006CH];取系统1/18秒计数
ADDDX,AX;延时x/18
DELAY10:
CMPES:[006CH],DX;时限到了?
JBEDELAY10;没
POPDX
POPES
RET
DELAY_PROCENDP
;============================================================
RANDPROCNEAR
;利用时钟的低位反转除100的余数作为随机数
;随机数在ax中带回
PUSHBX
PUSHCX
PUSHDX
PUSHF
MOVAH,0
INT1AH
;MOVAX,CX
MOVBX,DX
MOVCX,16
@RAND1:
RORBX,1
RCLAX,1
LOOP@RAND1
MOVDX,0
MOVBX,100
DIVBX
MOVAX,DX
POPF
POPDX
POPCX
POPBX
RET
RANDENDP
;==================================
LFCR:PUSHAX
PUSHDX
MOVAH,2
MOVDL,13
INT21H
MOVDL,10
INT21H
POPDX
POPAX
RET
;=================================
DSPALPROCNEAR
PUSHAX
PUSHBX
PUSHCX
PUSHDX
PUSHF
XORAH,AH
XORCX,CX
MOVBL,10
@DSPAL1:
DIVBL
INCCX
MOVDL,AH
XORAH,AH
ORDX,30H
PUSHDX
CMPAL,0
JNE@DSPAL1
MOVAH,2
@DISPAL2:
POPDX
INT21H
LOOP@DISPAL2
MOVDL,32
INT21H
POPF
POPDX
POPCX
POPBX
POPAX
RET
DSPALENDP
;================================
CODEENDS
ENDSTART

‘陆’ 汇编语言和普通的编程语言有啥不同

1. 汇编语言
为了减轻使用机器语言编程的痛苦,人们进行了一种有益的改进:用一些简洁的英文字母、符号串来替代一个特定的指令的二进制串,比如,用“A D D”代表加法,“M O V”代表数据传递等等,这样一来,人们很容易读懂并理解程序在干什么,纠错及维护都变得方便了,这种程序设计语言就称为汇编语言,即第二代计算机语言。然而计算机是不认识这些符号的,这就需要一个专门的程序,专门负责将这些符号翻译成二进制数的机器语言,这种翻译程序被称为汇编程序。

汇编语言同样十分依赖于机器硬件,移植性不好,但效率仍十分高,针对计算机特定硬件而编制的汇编语言程序,能准确发挥计算机硬件的功能和特长,程序精炼而质量高,所以至今仍是一种常用而强有力的软件开发工具。

2. 机器语言
电子计算机所使用的是由“0”和“1”组成的二进制数,二进制是计算机的语言的基础。计算机发明之初,人们只能降贵纡尊,用计算机的语言去命令计算机干这干那,一句话,就是写出一串串由“0”和“1”组成的指令序列交由计算机执行,这种语言,就是机器语言。使用机器语言是十分痛苦的,特别是在程序有错需要修改时,更是如此。而且,由于每台计算机的指令系统往往各不相同,所以,在一台计算机上执行的程序,要想在另一台计算机上执行,必须另编程序,造成了重复工作。但由于使用的是针对特定型号计算机的语言,故而运算效率是所有语言中最高的。机器语言,是第一代计算机语言。

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年代初开始,在软件设计思想上,又产生了一次革命,其成果就是面向对象的程序设计。在此之前的高级语言,几乎都是面向过程的,程序的执行是流水线似的,在一个模块被执行完成前,人们不能干别的事,也无法动态地改变程序的执行方向。这和人们日常处理事物的方式是不一致的,对人而言是希望发生一件事就处理一件事,也就是说,不能面向过程,而应是面向具体的应用功能,也就是对象(o b j e c t)。其方法就是软件的集成化,如同硬件的集成电路一样,生产一些通用的、封装紧密的功能模块,称之为软件集成块,它与具体应用无关,但能相互组合,完成具体的应用功能,同时又能重复使用。对使用者来说,只关心它的接口(输入量、输出量)及能实现的功能,至于如何实现的,那是它内部的事,使用者完全不用关心,C + +、V B、D e l p h i就是典型代表。

高级语言的下一个发展目标是面向应用,也就是说:只需要告诉程序你要干什么,程序就能自动生成算法,自动进行处理,这就是非过程化的程序语言。

c++是面向对象的高级语言

‘柒’ 汇编语言编程序

首先,你要明白:
1. 一个正数和一个负数相加,结果肯定不会溢出,即结果既不会大于最大正数,也不会小于最小负数;同样道理,两个正数或两个负数相减,结果肯定也不会溢出。另外还有一种特殊情况,即当DATA1为0,DATA2为最小负数的时候,DATA1 - DATA2也会溢出。

2. 若结果大于最大正数,肯定是两个正数相加;若结果小于最小负数,则肯定是两个负数相加;
3. 溢出标志只能判断是否溢出,而不能判断是正溢出,还是负溢出。所以应该先判断OF标志位,若有溢出,接着判断DATA1或者是DATA2的符号,若为正数,则为正溢出;否则为负溢出。

程序如下,我是按在386上编的。
.model small
.386
.dosseg
.stack 1024

.data
;DATA1 dd 81234567h
DATA1 dd 7fffffffh; 最大正数
DATA2 dd 80000000h; 最小负数
;DATA2 dd 1234;
SUM dd ?

.code
.startup

mov eax, DATA1
add eax, DATA2
jo OverFlow
jmp Done

OverFlow:
cmp DATA1, 0
jg PlusOverFlow
mov eax, 80000000h ;最小负数
jmp Done

PlusOverFlow:
mov eax, 7fffffffh ;最大正数

Done:
mov SUM, eax
.exit
end
你可以修改下DATA1和DATA2的值看下结果。

‘捌’ 汇编语言编程

很显然不是,最低级的语言应该是机器语言,都是0或1的机器码。汇编语言也算是低级语言,高级语言包括C语言、C++、VB、VC++、java等,汇编语言效率抄很高,学习微机原理时汇编语言是必须要学习的,执行的时候需要进行汇编,所谓汇编,就是把汇编语言翻译成计算机能够看懂的语袭言,也就是机器语言。同理,像您用C语言编的程序就需要编译也是这个道理。不过汇编语言比较繁琐,知你编的程序另外一个人不大可能看懂,但高级语言别人是能够很快看明白的,道所以安全性只是相对的,很多应用软件的源代码你是看不到的,也就无所谓安全不安全了

‘玖’ 汇编语言编程,写代码

;---------------------------
ASSUME CS:CC, DS:QW
;---------------------------
QW SEGMENT
M_1 DB 12, 13, 10, -5, -85, 37, 92, -25, 94, 10, -36
DB 1, 100, 12, -37, 85, -6, 28, 125, 34, 17, -92
LLL EQU $ - M_1
M_P DB 101 DUP(0)
M_N DB 101 DUP(0)

MSG DB 13, 10, 'Press any key to continue ... $'

O_P DB 13, 10, '+$'
O_N DB 13, 10, '-$'
QW ENDS
;---------------------------
CC SEGMENT
START:
MOV AX, QW
MOV DS, AX
;
CALL TONGJI
CALL DISPLAY

EXIT:
LEA DX, MSG
MOV AH, 9
INT 21H
MOV AH, 7
INT 21H

MOV AH, 4CH
INT 21H ;返回DOS
;---------------------------
TONGJI:
MOV BX, OFFSET M_1
MOV SI, OFFSET M_P
MOV DI, OFFSET M_N
MOV CX, LLL
LP: MOV AL, [BX]
CMP AL, 128
JB ZHENG
MOV [DI + 1], AL
INC DI
INC M_N
JMP NEXT
ZHENG:
MOV [SI + 1], AL
INC SI
INC M_P
NEXT:
INC BX
LOOP LP
RET
;---------------------------
DISPLAY:
LEA DX, O_P
MOV AH, 9
INT 21H
MOV AL, M_P
MOV AH, 0
CALL OUTPUT
LEA DX, O_N
MOV AH, 9
INT 21H
MOV AL, M_N
MOV AH, 0
CALL OUTPUT
RET
;---------------------------
OUTPUT:
MOV BX, 10
MOV CX, 0
OL1:MOV DX, 0
DIV BX
ADD DL, '0'
PUSH DX
INC CX
CMP AX, 0
JNZ OL1
MOV AH, 2
OL2:POP DX
INT 21H
LOOP OL2
RET
;---------------------------
CC ENDS
END START
;---------------------------

程序执行结果如下:

C:\MASM>ww

+15
-7
Press any key to continue ...

C:\MASM>

‘拾’ 汇编语言的编程用什么集成开发工具

汇编工具有很多种类,根据自己习惯选择即可。

  1. MASM(分步的,初学者不易掌握)

  2. VISUALASM(集成环境的)

  3. win32汇编的masm32软件包(Windows环境下的)

  4. nasm(linux平台)

  5. RadASM

热点内容
python编辑excel 发布:2024-12-25 09:21:19 浏览:151
w7将电脑文件如何共享文件夹共享文件夹 发布:2024-12-25 09:12:41 浏览:187
安卓系统中哪个软件最耗电 发布:2024-12-25 08:38:44 浏览:824
ssrssql 发布:2024-12-25 08:38:41 浏览:953
ai定位脚本 发布:2024-12-25 08:33:35 浏览:956
炎黄解说我的世界中国服务器 发布:2024-12-25 08:33:28 浏览:796
sql2008发布 发布:2024-12-25 08:27:09 浏览:342
如何用存档开服务器 发布:2024-12-25 08:23:27 浏览:713
安卓手机为什么不显示通知栏 发布:2024-12-25 08:21:15 浏览:906
解压肚子疼 发布:2024-12-25 08:15:01 浏览:589