导航:首页 > 编程语言 > 汇编程序

汇编程序

发布时间:2022-02-24 08:21:09

❶ 汇编语言是什么

汇编语言(AssemblyLanguage)是面向机器的程序设计语言。在汇编语合中,用助记符(Memoni)代替操作码,用地址符号(Symbol)或标号(Label)代替地址码。这样用符号代替机器语言的二进制码,就把机器语言变成了汇编语言。于是汇编语言亦称为符号语言。使用汇编语言编写的程序,机器不能直接识别,要由一种程序将汇编语言翻译成机器语言,这种起翻译作用的程序叫汇编程序,汇编程序是系统软件中语言处理系统软件。汇编程序把汇编语言翻译成机器语言的过程称为汇编。中国着名计算机科学教育家王爽写过一本名叫《汇编语言》的书。

❷ 什么是汇编程序什么是汇编语言

最初,程序只能用机器语言编写。用机器语言编写程序是早期经过严格训练的专业技术人员的工作,普通的程序员一般难以胜任,而且用机器语言编写的程序不易阅读、出错率高、难以维护,也不能直观地反映用计算机解决问题的基本思路。但也有优点,用机器语言编写出来的程序执行效率高,CPU严格按照程序员的要求去做,没有多余的额外操作。所以,在以保留“程序执行效率高”为前提下,人们就开始着手研究一种能大大改善程序可读性的编程方法。为了改善机器指令的可读性,选用了一些能反映机器指令功能的单词或词组来代表该机器指令,而不再关心机器指令的具体二进制编码。与此同时,也把CPU内部的各种资源符号化,使用该符号名也等于引用了该具体的物理资源。
如此一来,令人难懂的二进制机器指令就可以用通俗易懂的、具有一定含义的符号指令来表示了,于是,汇编语言就有了雏型。现在,我们称这些具有一定含义的符号为助记符,用指令助记符、符号地址等组成的符号指令称为汇编格式指令(或汇编指令)。汇编语言是汇编指令集、伪指令集和使用它们规则的统称。伪指令是在程序设计时所需要的一些辅助性说明指令,它不对应具体的机器指令。
用汇编语言编写的程序称为汇编语言程序,或汇编语言源程序。

❸ 汇编语言程序的意思

在程序段前缀(PSP)的0偏移处存放有十六进制码:CD 20
PUSH DS 数据段段址入栈
SUB AX,AX ;AX清0
PUSH AX ;AX值入栈
... ...
RET 从栈中弹出AX、DS
可理解为:
POP IP ;重置指令指针
POP CS ;重置代码段址
转执行 CD 20 [程序段前缀(PSP)的0偏移处预存的十六进制码]
该指令是 INT 20H 的机器指令码,调用DOS的20H中断结束程序。

❹ 汇编程序

; 题目名称:输入成绩,分别升序、降序排序
; 题目来源:http://..com/question/132061481.html
; 操作说明:成绩按百分制,输入成绩时,最多3位数,即100分;小于100分的成绩,按回车确认
; 本程序在MASMPlus 1.2集成环境下通过编译,经过调试,运行正确。
Code Segment
Assume CS:Code,DS:Code
CR equ 000DH
LF equ 000AH
KBBack equ 0008H
; -------------------------------------
; 功能:显示指定地址(Str_Addr)的字符串
; 入口:
; Str_Addr=字符串地址(要求在数据段)
; 用法: Output Str_Addr
; 用法举例:Output PromptStr
Output MACRO Str_Addr
push ax
lea dx,Str_Addr
mov ah,9
int 21h
pop ax
EndM
; -------------------------------------
; 功能:在当前光标位置显示一个字符
; 入口:dl=要显示的字符
Output_Chr proc Near
push ax
mov ah,2
int 21h
pop ax
ret
Output_Chr Endp
; -------------------------------------
; 功能:取光标位置
; 入口:无
; 出口:DH=行号,DL=列号
GetCursor Proc Near
PUSH DS
PUSH AX
PUSH BX
PUSH CX
PUSH DX
PUSH CS
POP DS
XOR BX,BX
MOV AH,3
INT 10H
MOV Cursor_Row,DH
MOV Cursor_Col,DL
POP DX
POP CX
POP BX
POP AX
POP DS
RET
Cursor_Row DB ?
Cursor_Col DB ?
GetCursor EndP
; -------------------------------------
; 功能:置光标位置
; 入口:Cursor_Row=行坐标; Cursor_Col: 列坐标)
SetCursor Proc Near
PUSH DS
PUSH DX
PUSH CX
PUSH BX
PUSH AX
PUSH CS
POP DS
MOV DH,Cursor_Row
MOV DL,Cursor_Col
XOR BX,BX
MOV AH,2
INT 10H
POP AX
POP BX
POP CX
POP DX
POP DS
RET
SetCursor EndP
; -------------------------------------
; 功能:键盘输入一个指定位数(N)的十进制数字,将其转换成二进制数并保存在指定的内存单元。
; 输足N位的,自动结束输入;不足N位的,空格结束输入。
; 由于限定最大数据类型为字,所以,数字位数最多:5,最大无符号数:65536
; 约定:直接回车,视为数字0
; 入口:cs:@@Digits=数字位数;es:di=保存输入的数字首地址
; cs:@@Type_Data=保存的数据类型,B=字节类型,W=字类型。
; 出口:转换后的二进制数保存在di所指的单元
Input_Dec Proc Near
push ds
push dx
push cx
push bx
push di
push cs
pop ds
call GetCursor ;取光标位置
mov dx,WORD PTR Cursor_Row
mov @@Tmp_Cursor,dx ;保存起始光标位置
lea di,@@Save_Tmp
push di
cld
mov cl,@@Digits
xor ch,ch
push cx
@@Input_Dec: call GetCursor ;取光标位置
mov ah,1 ;从键盘接受一个字符
int 21h
cmp al,27 ;Esc?
jz @@Return
cmp al,CR ;若键入的是回车,已经键入的数字不足N位
jz @@ASC_Dec ;转去处理已经键入的数字
cmp al,KBBack
jz @@KB_Back ;若是回空键,重新输入
cmp al,'0'
jb @@KBBack ;若低于数字'0',重新输入
cmp al,'9'
ja @@KBBack ;若高于数字'9',重新输入
jmp @@Save_Dig
@@KB_Back: cmp cl,cs:@@Digits ;十进制数字位数
jz @@Input_Dec
inc cx
dec di
dec Cursor_Col
@@KBBack: call SetCursor ;置光标位置
jmp @@Input_Dec
@@Save_Dig: and al,0fh ;转换成二进制数
stosb ;保存
loop @@Input_Dec ;接受下一个数字
@@ASC_Dec: mov ax,cx
pop cx
pop si
sub cx,ax ;实际输入的数字位数
xor bp,bp
xor dx,dx
xor ax,ax
jcxz @@Save_Ret ;若直接回车,没有输入任何数字,按输入'0'处理
dec cx ;实际输入的数字位数减1,准备把输入的这一串数字转换成二进制数
jcxz @@One_Digit ;若输入的数字只有一位,转去直接保存这个二进制数
mov bx,10
@@Mul_Ten: lodsb
xor ah,ah
add ax,bp
mul bx
mov bp,ax
loop @@Mul_Ten
@@One_Digit: lodsb
xor ah,ah
add ax,bp
@@Save_Ret: pop di
cmp @@Type_Data,'B' ;字节类型?
jz $+5
stosw
jmp $+3
stosb
pop bx
pop cx
pop dx
pop ds
clc
ret
@@Return: pop cx
pop di
pop di
pop bx
pop cx
pop dx
pop ds
stc
ret
@@Tmp_Cursor dw ? ;起始光标位置
@@Digits db ? ;十进制数字位数
@@Type_Data db 'B' ;保存的数据类型。B=字节类型,W=字类型
@@Save_Tmp db 7 p(?)
Input_Dec EndP
; -------------------------------------
; 功能:把AX中的二进制无符号数转换成显式的十进制ASCII码,并送显示屏显示
; 入口:AX=二进制数
; 出口:在当前光标位置显示转换后的ASCII码数字
Unsi_Dec_ASCII Proc Near
push dx
push bx
push di
mov bx,10
lea di,@@Temp_Save[5]
mov BYTE PTR [di],'$'
dec di
cld
@@Divide: xor dx,dx
div bx
or dl,30h
mov [di],dl
dec di
test ax,ax
jnz @@Divide
inc di
push di
pop dx
mov ah,9
int 21h
pop di
pop bx
pop dx
ret
@@Temp_Save db 6 p(?)
Unsi_Dec_ASCII EndP
; -------------------------------------
Input_Score proc Near
mov @@Digits,3 ;十进制数字位数
mov @@Type_Data,'B' ;保存的数据类型。B=字节类型,W=字类型
lea di,Buffer ;成绩保存地址
Output Prompt_Str ;提示输入成绩
@@Input_Scores:call Input_Dec ;键盘输入一个指定位数(N)的十进制数字,将其转换成二进制数并保存在指定的内存单元
pushf
inc Cursor_Col
call Setcursor
mov dl,20h
call Output_Chr ;显示一个空格
popf
jnc @@Input_Scores
mov cx,di
sub cx,offset Buffer ;成绩个数
mov Counter,cx ;保存
ret
Input_Score Endp
; -------------------------------------
Increase_Sort proc Near
mov BYTE ptr @@Compare[5],76h
jmp @@Sorting
Increase_Sort Endp
; -------------------------------------
Decrease_Sort proc Near
mov BYTE ptr @@Compare[5],73h
@@Sorting: lea si,Buffer
mov cx,Counter ;成绩个数
dec cx ;外循环次数
cld
@@Scanning: push cx ;入栈保存外循环次数
push si ;入栈保存数组地址
@@Compare: mov di,si ;当前数组元素地址赋给目的变址寄存器,以备交换之用
lodsb ;将当前数组元素读入累加器
cmp al,[si] ;当前数组元素与相邻的下一个数组元素相比较
jae @@NextOne ;若大于或等于,不作数据交换,处理下一个数组元素
xchg al,[si] ;若小于,交换数组元素
stosb ;保存数值较小者
@@NextOne: loop @@Compare ;处理下一个数组元素
pop si ;数组地址出栈
pop cx ;外循环次数出栈
loop @@Scanning ;下一趟比较
mov WORD ptr Cursor_Row,12
call SetCursor ;置光标位置
lea si,Buffer
mov cx,Counter ;成绩个数
@@List_Scores: lodsb
xor ah,ah
call Unsi_Dec_ASCII ;把AX中的二进制无符号数转换成显式的十进制ASCII码,并送显示屏显示
mov dl,20h
call Output_Chr ;显示一个空格
loop @@List_Scores
ret
Decrease_Sort Endp
; -------------------------------------
Prompt_Menu db 35 p(20h),'Main Menu',13,10
db 30 p(20h),201,18 p(205),187,13,10
db 30 p(20h),186,' 1. input scores ',186,13,10
db 30 p(20h),186,' 2. increase sort ',186,13,10
db 30 p(20h),186,' 3. decrease sort ',186,13,10
db 30 p(20h),186,' 0. Return to DOS ',186,13,10
db 30 p(20h),200,18 p(205),188,13,10
db 32 p(20h),'Choice(0-3):$'
Cursor_Tmp dw ?
Counter dw ? ;成绩个数
Proc_Addr dw Input_Score,Increase_Sort,Decrease_Sort
Prompt_Str db 13,10,10,'Please input scores:',13,10,'$'
Press_Key db 7,13,12 p(10),'The complated. Press any key to exit...$'
Start: push cs
pop ds ;使数据段与代码段同段
mov ax,3 ;设置25*80字符显示方式
int 10h
Output Prompt_Menu ;显示主菜单
xor bx,bx
mov ah,3
int 10h
mov Cursor_Tmp,dx
mov ax,0b800h
mov es,ax ;设置字符显示方式缓冲区段地址
mov di,35*2+1
mov al,13 ;LightMagenta
mov cx,10
cld
Attribute: stosb
inc di
loop Attribute
mov di,160*2+32*2+1
stosb
add di,159
stosb
add di,159
stosb
add di,159
stosb
mov di,160*7+39*2+1
stosb
inc di
stosb
inc di
stosb
push cs
pop es ;使附加段与代码段同段
Choice_Func: mov dx,Cursor_Tmp
xor bx,bx
mov ah,2
int 10h
mov ah,1
int 21h
cmp al,'0'
jz Exit_Proc
cmp al,'1'
jb Choice_Func
cmp al,'3'
ja Choice_Func
and ax,0fh
mov bx,ax
dec bx
shl bx,1
call Proc_Addr[bx]
jmp Choice_Func
; -------------------------------------
Exit_Proc: Output Press_Key ;提示操作完成,按任意键结束程序
mov ah,1
int 21h
mov ah,4ch ;结束程序
int 21h
Buffer db ? ;数据缓冲区
Code ENDS
END Start ;编译到此结束

❺ 汇编语言能做什么

汇编语言的作用:

汇编语言用一些容易理解和记忆的字母,单词来代替一个特定的指令,比如:用“ADD”代表数字逻辑上的加减,“ MOV”代表数据传递等等,通过这种方法,人们很容易去阅读已经完成的程序或者理解程序正在执行的功能,对现有程序的bug修复以及运营维护都变得更加简单方便。当计算机的硬件不认识字母符号,这时候就需要一个专门的程序把这些字符变成计算机能够识别的二进制数。因为汇编语言只是将机器语言做了简单编译,所以并没有根本上解决机器语言的特定性,所以汇编语言和机器自身的编程环境息息相关,推广和移植很难,但是还是保持了机器语言优秀的执行效率,因为他的可阅读性和简便性,汇编语言到现在依然是常用的编程语言之一。

汇编语言不像其他大多数的程序设计语言一样被广泛用于程序设计。在今天的实际应用中,它通常被应用在底层,硬件操作和高要求的程序优化的场合。驱动程序、嵌入式操作系统和实时运行程序都需要汇编语言。

(5)汇编程序扩展阅读:

汇编语言是计算机提供给用户的最快最有效的语言,也是能够利用计算机的所有硬件特性并能够直接控制硬件的唯一语言。但是由于编写和调试汇编语言程序要比高级语言复杂,因此目前其应用不如高级语言广泛。

汇编语言比机器语言的可读性要好,但跟高级语言比较而言,可读性还是较差。不过采用它编写的程序具有存储空间占用少、执行速度快的特点,这些是高级语言所无法取代的。在实际应用中,是否使用汇编语言,取决于具体应用要求、软件开发时间和质量等方面作权衡。

汇编语言作为机器语言之上的第二代编程语言,它也有很多优点:

1、可以轻松的读取存储器状态以及硬件I/O接口情况

2、编写的代码因为少了很多编译的环节,可以能够准确的被执行

3、作为一种低级语言,可扩展性很高

缺点:

1、因为代码非常单调,特殊指令字符很少,所以造成了代码的冗长以及编写的困难

2、因为汇编仍然需要自己去调用存储器存储数据,很容易出现BUG,而且调试起来也不容易

3、就算完成了一个程序,后期维护时候也需要耗费大量的时间。

4、因为机器的特殊性造成了代码兼容性差的缺陷

❻ 汇编语言 程序

; 本程序通过编译,运行正确
Code Segment
Assume CS:Code,DS:Code
CR equ 000DH
LF equ 000AH
KBBack equ 0008H
; -----------------------------------------
; 功能:显示指定地址(Str_Addr)的字符串
; 入口:
; Str_Addr=字符串地址(要求在数据段)
; 用法: Output Str_Addr
; 用法举例:Output PromptStr
Output MACRO Str_Addr
lea dx,Str_Addr
mov ah,9
int 21h
EndM
; -----------------------------------------
; 功能:取光标位置
; 入口:无
; 出口:DH=行号,DL=列号
GetCursor Proc Near
PUSH AX
PUSH BX
PUSH CX
XOR BX,BX
MOV AH,3
INT 10H
MOV Cursor_Row,DH
MOV Cursor_Col,DL
POP CX
POP BX
POP AX
RET
Cursor_Row DB ?
Cursor_Col DB ?
GetCursor EndP
; -----------------------------------------
; 功能:置光标位置
; 入口:Cursor_Row=行坐标; Cursor_Col: 列坐标)
SetCursor Proc Near
PUSH CX
PUSH BX
PUSH AX
MOV DH,Cursor_Row
MOV DL,Cursor_Col
XOR BX,BX
MOV AH,2
INT 10H
POP AX
POP BX
POP CX
RET
SetCursor EndP
; -----------------------------------------
; 功能:键盘输入一个N位的十进制数字,将其转换成二进制数并保存在指定的内存单元。
; 入口:N=数字位数;di=保存输入的数字首地址
; 出口:转换后的二进制数保存在di所指的单元
Input_Digit Proc Near
push dx
push cx
push bx
push di
lea di,@@Save_Tmp
push di
cld
mov cx,N
push cx
@@Input: call GetCursor ;取光标位置
mov ah,1 ;从键盘接受一个字符
int 21h
cmp al,CR ;若键入的是回车,已经键入的数字不足N位
jz @@ASC_Dec ;转去处理已经键入的数字
cmp al,KBBack
jz @@KB_Back ;若是回空键,重新输入
cmp al,'0'
jb @@KBBack ;若低于数字'0',重新输入
cmp al,'9'
ja @@KBBack ;若低于数字'9',重新输入
jmp @@Save_Dig
@@KB_Back: dec Cursor_Col
inc cx
dec di
@@KBBack: call SetCursor ;置光标位置
jmp @@Input
@@Save_Dig: and al,0fh ;转换成二进制数
stosb ;保存
loop @@Input ;接受下一个数字
@@ASC_Dec: mov ax,cx
pop cx
pop si
sub cx,ax ;实际输入的数字位数
xor bp,bp
xor dx,dx
xor ax,ax
jcxz @@Save_Ret ;若直接回车,没有输入任何数字,按输入'0'处理
dec cx ;实际输入的数字位数减1,准备把输入的这一串数字转换成二进制数
jcxz @@One_Digit ;若输入的数字只有一位,转去直接保存这个二进制数
mov bx,10
@@Mul_Ten: lodsb
cbw
add ax,bp
mul bx
mov bp,ax
loop @@Mul_Ten
@@One_Digit:lodsb
cbw
add ax,bp
@@Save_Ret: pop di
stosw
pop bx
pop cx
pop dx
ret
@@Save_Tmp db 16 p(?)
Input_Digit EndP
; -----------------------------------------
N equ 4 ;输入的十进制整数位数
Number1 dw ?
Number2 dw ?
prompt_One db 'Please the first number: $'
prompt_Two db 13,10,'Please the second number: $'
Start: push cs
pop ds
push cs
pop es ;使数据段、附加段与代码段同段
Output prompt_One ;提示输入第一个数
lea di,Number1 ;变量Number1的地址
call Input_Digit ;从键盘接受一个N位数字
Output prompt_Two ;提示输入第一个数
lea di,Number2 ;变量Number1的地址
call Input_Digit ;从键盘接受一个N位数字
mov ax,Number1 ;被乘数
mul Number2
Exit_Proc: mov ah,4ch ;结束程序
int 21h
Code ENDS
END Start ;编译到此结束

❼ 一般用什么软件来写汇编程序

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

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

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

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

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

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

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

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

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

■html属于汇编吗?

不属于汇编语言。它是Hypertext Markup Language的缩写,用来编写网页的语言.通常一个网页的网址最后面有.html或者.htm都是用这种语言编写的.
另外,它一般用来编写静态网页,现在最流行的动态语言有ASP,.NET和PHP等等.

阅读全文

与汇编程序相关的资料

热点内容
优信二手车解压后过户 浏览:63
Windows常用c编译器 浏览:780
关于改善国家网络安全的行政命令 浏览:835
安卓如何下载网易荒野pc服 浏览:656
javainetaddress 浏览:106
苹果4s固件下载完了怎么解压 浏览:1006
命令zpa 浏览:288
python编译器小程序 浏览:946
在app上看视频怎么光线调暗 浏览:542
可以中文解压的解压软件 浏览:595
安卓卸载组件应用怎么安装 浏览:915
使用面向对象编程的方式 浏览:342
程序员项目经理的年终总结范文 浏览:932
内衣的加密设计用来干嘛的 浏览:435
淮安数据加密 浏览:295
魔高一丈指标源码 浏览:984
松下php研究所 浏览:171
c回调java 浏览:403
梦幻端游长安地图互通源码 浏览:747
电脑本地文件如何上传服务器 浏览:315