汇编语言运算符
c语言和汇编运算对应关系
c语言和汇编运算对应关系C语言和汇编运算对应关系引言:计算机科学的发展是一项深刻而复杂的领域,其中有两个重要的编程语言,C语言和汇编语言。
C语言是一种高级编程语言,而汇编语言是一种底层编程语言。
本文将探讨C语言和汇编语言之间的运算对应关系。
我们将从基本的概念和语法开始,一步一步深入,以帮助读者更好地理解这两种语言之间的联系。
第一部分:C语言的运算在C语言中,运算符是用于执行各种算术和逻辑操作的符号。
它们允许我们对变量和常量进行操作,并生成一个结果。
1. 算术运算符:包括加法(+),减法(-),乘法(*),除法(/)和求余(%)。
这些运算符用于执行基本的数学运算。
2. 关系运算符:包括等于(==),大于(>),小于(<),大于等于(>=),小于等于(<=)和不等于(!=)。
它们用于比较两个值之间的关系并生成一个布尔结果(真或假)。
3. 逻辑运算符:包括逻辑与(&&),逻辑或( )和逻辑非(!)。
它们用于执行一系列逻辑操作,并生成一个布尔结果。
第二部分:汇编的运算在汇编语言中,运算是通过使用特定的指令来实现的。
每个指令都会完成一些特定的操作,并生成一个结果。
1. 寄存器:寄存器是CPU内部的存储单元,可以用于存储和处理数据。
在汇编语言中,我们可以使用不同的寄存器来执行各种运算操作。
例如,AX寄存器用于存储数据,AL寄存器用于存储低8位数据,AH寄存器用于存储高8位数据等等。
2. 算术指令:汇编语言提供了一系列算术指令,用于执行加法、减法、乘法和除法运算等。
例如,ADD指令用于将两个数相加,并将结果存储在目标寄存器中。
3. 逻辑指令:逻辑指令用于执行各种逻辑操作,例如与、或、非和异或等。
例如,AND指令可用于执行逻辑与操作,并将结果存储在目标寄存器中。
4. 条件跳转指令:汇编语言提供了一些条件跳转指令,用于根据特定的条件转移执行流程。
例如,JZ(零标志跳转)指令可用于在零标志被设置时跳转到特定的位置。
汇编语言符号及教材符号汇总大全
""∶教材符号+、-、*、/∶算术运算符。
&∶宏处理操作符。
宏扩展时不识别符号和字符串中的形式参数,如果在形式参数前面加上一个&记号,宏汇编程序就能够用实在参数代替这个形式参数了。
$∶地址计数器的值——记录正在被汇编程序翻译的语句地址。
每个段均分配一个计数器,段内定义的所有标号和变量的偏移地址就是当前汇编地址计数器的值。
?∶操作数。
在数据定义语句中,操作数用?,其作用是分配并保留存储空间,但不存入确定的数据。
=∶等号伪指令——符号定义。
对符号进行定义和赋值,功能与EQU相似,但允许(重复)再定义。
:∶修改属性运算符(操作符)——段操作符。
用来临时给变量、标号或地址表达式指定一个段属性(不用缺省的段寄存器),自动生成一个“跨段前缀字节”。
注意,段寄存器CS和ES不能被跨越,堆栈操作时也不能跨越SS。
;∶注释符号。
%∶特殊宏操作符,用来将其后的表达式(通常是符号常数,不能是变量名和寄存器名)转换成它所代表的数值,并将此数值的ASCII码嵌入到宏扩展中。
()∶1.运算符——用来改变运算符的优先级别。
2.教材符号,表示括号内存储单元(或寄存器)的内容。
<>∶宏调用时用来将带间隔符(如空格,逗号等)的字符串(作为实参)括起来。
[]∶1.运算符。
方括号括起来的数是数组变量的下标或地址表达式。
带方括号的地址表达式必须遵循下列原则,①只有BX、BP、SI、DI这四个寄存器可在方括号内出现;②BX或BP可单独出现在各方括号中,也可以与常数、SI或DI一起出现在方括号内,但不允许BX和BP出现在同一个方括号内;③SI和DI可以单独出现在各方括号内,也可以与常数、BP或BX一起出现在方括号内,但不允许SI和DI出现在同一个方括号内;④一个方括号内包含多个寄存器时,它们只能作加法运算;⑤若方括号内包含基址指针BP,则隐含使用堆栈段寄存器SS提供段基址,否则均隐含使用数据段寄存器DS提供段基址。
汇编语言学习第4章
不同而不同。
(名字项,常称为标号) 标号是程序设计人员自己定义的表示符号,用来表示本语句的符号地址
(即该指令的偏移地址,也就是该单元与其所处段基址的偏移量)是可有
可无的,只有当需要用符号地址来访问该语句时才需要。 2.operation(操作符)
操作符项可以是指令、伪操作或宏指令的助记符。对于指令,作用是指出
1.等价语句EQU
等价语句的一般使用格式如下: SYMBOL EQU EXPRESSION
作用是用左边的符号名代表右边的表达式。
注意:等价语句不会给符号名分配存储空间,符号名不能与其它符号同名, 也不能被重新定义。
(1)用符号名代表常量或表达式
例4.14 (2)用符号名代表字符串 例4.15 (3)用符号名代表关键字或指令助记符 例4.16
例4.21
2.定义字变量的伪指令为DW
一个变量占一个字空间
例4.22:WORD1 DW DW 89H, 1909H, -1 0ABCDH, ?, 0
上面的定义语句经汇编后所产生出的内存单元分配情况如下:
… 89 00 09 19 FF FF CD AB --00 00 …
例4.23
3.双字变量定义伪指令DD 每个双字变量占用二个连续的字单元(四个字节)。
功能和作用,而不应该只写出指令的动作。
4.2运算符号
4.2.1算术运算符
算术运算符有:+、-、*、/和MOD。 其中: +、-、*、/就是我们算术中常用的加、减、乘、除。 MOD算符是模运算。指除法运算后得到的余数。 例如:5 MOD 2为1。 注意:算术运算符可以用于数字表达式或地址表达式中,但当它用于地址 表达式时,只有当其结果有明确的物理意义时才是有效的。 例如:将两个地址相乘或相除是无意义的。地址可以做加减运算,但也必 须注意物理意义。例如把两个不同段的地址相加减也是无意义的。 例4.1 例4.2
汇编语言及编程实例(电子教案)
汇编语言及编程实例(电子教案)汇编语言程序设计2005第四章汇编语言程序设计回顾:8086的内部结构、寄存器功能和工作过程,指令格式、寻址方式和功能。
本讲重点:了解汇编的概念及其方法,掌握汇编程序的基本格式,常用运算符的使用方法,汇编的步骤。
4.1汇编语言的基本元素一、汇编语言的语句格式由汇编语言编写的源程序是由许多语句(也可称为汇编指令)组成的。
每个语句由1~4个部分组成,其格式是:[标号]指令助记符[操作数][;注解]其中用方括号括起来的部分,可以有也可以没有。
每部分之间用空格(至少一个)分开,一行最多可有132个字符。
1.标识符给指令或某一存储单元地址所起的名字。
可由下列字符组成:字母:A~z;数字:0~9;特殊字符:、·、@、一、$数字不能作标识符的第一个字符,而圆点仅能用作第一个字符。
标识符最长为31个字符。
当标识符后跟冒号时,表示是标号。
它代表该行指令的起始地址;当标识符后不带冒号时,表示变量;伪指令前的标识符不加冒号。
2.指令助记符表示不同操作的指令,可以是8086的指令助记符,也可以是伪指令。
3.操作数指令执行的对象。
依指令的要求,可能有一个、两个或者没有,例如:RET;无操作数COUNT:INCC某;一个操作数如果是伪指令,则可能有多个操作数,例如:COSTDB3,4,5,6,7;5个操作数MOVA某,[BP+4];第二个操作数为表达式4.注解该项可有可无,是为源程序所加的注解,用于提高程序的可读性。
二、汇编语言的运算符1.算术运算符、逻辑运算符和关系运算符-1-汇编语言程序设计2005算术运算符可以应用于数字操作数,结果也是数字。
而应用于存储器操作数时,只有+、-运算符有意义。
2.取值运算符SEG、OFFSET、TYPE、SIZE和LENGTH·SEG和OFFSET分别给出一个变量或标号的段地址和偏移量。
例如,定义:SLOTDW25则:MOVA某,SLOT;从SLOT地址中取一个字送入A某MOVA某,SEGSLOT;将SLOT所在段的段地址送入A某MOVA某,OFFSETSLOT;将SLOT所在段的段内偏移地址送A某·TYPE操作符返回一个表示存储器操作数类型的数值。
汇编语言中neg指令
汇编语言中的neg指令1. 介绍在汇编语言中,neg(negate)指令用于将一个操作数的值取反。
它是一种单目运算符,可以用于有符号和无符号数。
2. 语法neg指令的语法如下:neg destination其中,destination是要取反的操作数。
3. 功能neg指令将操作数的值取反,并将结果存储回原来的位置。
如果操作数是有符号数,那么它的补码将被计算。
如果操作数是无符号数,那么它的二进制表示将被按位取反。
4. 使用示例下面是一些使用neg指令的示例:示例1:有符号整数假设我们有一个有符号整数变量num,其初始值为10。
我们可以使用neg指令将num的值取反:mov eax, num ; 将num加载到eax寄存器neg eax ; 取反eax寄存器中的值mov num, eax ; 将eax寄存器中的值存回num变量在执行这段代码后,num变量的值将变为-10。
示例2:无符号整数假设我们有一个无符号整数变量count,其初始值为100。
我们可以使用neg指令按位取反count的二进制表示:mov ecx, count ; 将count加载到ecx寄存器neg ecx ; 按位取反ecx寄存器中的值mov count, ecx ; 将ecx寄存器中的值存回count变量在执行这段代码后,count变量的值将变为4294967195。
5. 注意事项在使用neg指令时,需要注意以下几点:•neg指令只能用于有符号和无符号整数,不能用于浮点数。
•neg指令改变了操作数的值。
因此,在使用neg指令之前,应该确保操作数的值不再需要。
•neg指令会影响CPU的状态寄存器,特别是零标志位(ZF)和进位标志位(CF)。
在使用neg指令后,需要根据具体情况来处理这些标志位。
6. 总结neg指令是汇编语言中常用的一条指令,用于将操作数取反。
它可以应用于有符号和无符号整数,并且可以通过改变操作数的二进制表示或计算补码来实现。
汇编语言的语句格式
ORG 表达式
DATA D1 D2 DATA CODE
START: …
SEGMENT
ORG 20H
DB 12H,13H
ORG $+01H
61H,62H,63H
ENDS
SEGMENT
ASSUME
CS:CODE, …
ORG 100H
…
CODE
ENDS END START
2. 汇编语言的语句
指令性语句 指示性语句
一、汇编语言的语句格式:
[名字] 操作码/伪操作 [操作数] [;注释]
(一)、名字、标号、变量
标号的三种属性:段、偏移量和类型 变量的三种属性:段、偏移量和类型
(二)、操作码和伪操作
(三)、语句中的操作数
1)、常数 2)、寄存器 3)、标号 4)、变量 5)、表达式
ENDS SEGMENT BYTE
; STACK段结束 ;定义DATA1段,定位类型BYTE
DB “This is an example!” ;长度为19个字节
ENDS
; DATA1段结束
SEGMENT WORD ;定义DATA2段,定位类型WORD
DW 40 DUP(0) ;长度为40字,80个字节
6 *,/,MOD,
SHL,SHR
优先 级
运算符
7
十,— (二元运算符)
8
EQ, NE, LT,
LE, GT, GE
9 NOT
10 AND
11 OR,XOR
12 SHORT
(低)
2.伪指令
符号定义伪指令 数据定义伪指令 段定义伪指令 过程定义伪指令 定位定义伪指令
一、符号定义伪指令
汇编语言设计-算术运算指令
NEG指令是对指令中的操作数取补,再将结果送回。因 对一个操作数求2的补码,相当于0减去此操作数,所以NEG 指令执行的也是减法操作。
说明:0 – OPRD 又相当于: ①、FFH-OPRD+1 (字节操作)或
②、FFFFH-OPRD+1(字操作)。即将OPRD内容变反加1
例:若(AL)=13H 0000 0000 执行 NEG AL – 0001 0011
0000 0110 + 1111 1100 1← 0000 0010
6 + 252
258>255
+6 + (–4)
+2
CF=1 溢出
OF=0 不溢出
ⅲ、无符号数不溢出,带符号数溢出:
二进制加法 认作无符号 认作带符号数
0000 1000 + 0111 1011
1000 0011
8 + 123
131 CF=0 无溢出
2、带进位位的加法指令ADC ADC dest , src ; dest←dest+src+CF
ADC主要用于多字节运算,ADC对标志位的影响同ADD。 例:计算 1234FEDCH+33128765H 分别存于数据段指
定的区域中,低位在前,高位在后,相加后其和存入前一个双 字所在的区域中。 (SI)→1000H DCH (41H)
+ 39H 0011 1001
0110 1110
则(AL)=6EH,低4位为非法码,故需调整。
4、组合十进制加法调整指令DAA
(BCD码的加法十进制调整指令)
格式:DAA
功能:对组合BCD码相加的结果进行调整,使结果仍为 组合的BCD码。
计算机语言与编程基础
计算机语言与编程基础计算机语言与编程基础是计算机科学领域中最基础的知识之一。
它涉及到计算机系统、软件开发和算法设计等方面的内容。
本文将详细介绍计算机语言的类型、编程基础知识以及编程语言的发展历程。
一、计算机语言的类型计算机语言是一种特殊的语言,用于人与计算机之间的信息交流。
根据使用的方式和目的不同,计算机语言可以分为机器语言、汇编语言和高级语言三种类型。
1. 机器语言机器语言是计算机能够直接识别和执行的语言。
它由一系列二进制代码组成,每一个指令或数据对应一个特定的二进制码。
机器语言对于计算机来说最为直接,但是对人类来说却非常晦涩难懂。
2. 汇编语言汇编语言是机器语言的助记符表示形式,使用助记符和简短的字符代替了复杂晦涩的二进制代码。
通过汇编语言,程序员可以更加方便地理解和书写机器指令。
然而,汇编语言的学习和使用相对较为繁琐,需要对硬件结构和指令集有一定的了解。
3. 高级语言高级语言是相对于机器语言和汇编语言而言的。
它使用更接近日常语言的表达方式,具有更高的可读性。
与机器语言和汇编语言不同,高级语言的代码需要通过编译器或解释器来转换为机器语言。
常见的高级语言有C、C++、Java、Python等。
二、编程基础知识了解计算机语言后,学习编程基础知识是成为一名优秀程序员的第一步。
1. 变量与数据类型在编程中,变量是存储数据的容器。
声明变量时,需要指定数据类型,以告诉计算机应该如何解释和处理所存储的数据。
常见的数据类型包括整型、浮点型、字符型、布尔型等。
2. 运算符与表达式运算符用于对数据进行各种运算操作,比如加减乘除、逻辑运算、比较运算等。
运算符可以与操作数组合形成表达式,用于进行计算。
了解各种运算符的优先级和使用方法是编程中重要的基础知识。
3. 条件语句与循环结构条件语句和循环结构是控制程序执行流程的重要工具。
条件语句根据条件的真假来决定执行哪一段代码,常见的有if语句和switch语句。
循环结构用于重复执行某一段代码,常见的有for循环、while循环和do-while循环。
汇编语言设计-算术运算指令
N
传完否?
JNZ AGAIN ;CX≠0,循环
Y
结束
8086算术运算指令可用的BCD码有两种:
ⅰ、组合BCD码:一个字节表示2位BCD码
ⅱ、非组合BCD码:一个字节只用低4位表示1位BCD 码, 高4位为0(无意义)。
例:设(AL)=35,(BL)=39 35H 0011 0101
执行 ADD AL,BL
JNS NEXT
;若SF=0,则(AX)>(BX),转NEXT
XCHG AX,BX ;否则交换
NEXT:HLT
Ⅱ、两负数比较,即A<0,B<0:两负数相减,结果也不会溢出,
仍可用符号标志,若SF=0,则A>B;反之若SF=1,则A<B。
Ⅲ、两异号数比较。当A>0,B<0时,当然的结果应该是A>B,
而且有SF=0。
格式:ADD dest,src ;dest←dest+src
功能:将源操作数与目的操作数相加,将结果送回目的操 作数。指令执行后对各状态标志均产生影响。
例:ADD CX,0F0F0H 设指令执行前(CX)=5463H
0101 0100 0110 0011
思考:
+ 1111 0000 1111 0000
LEA SI,BUF1 ;SI指向BUF1 LEA DI,BUF2 ;DI指向BUF2
取数 传送
MOV CX,100 ;CX放计数初值
AGAIN:MOV AL,[SI] ;取一字节数 MOV [DI],AL ;传送一字节数
修改地址指针 修改计数器
INC SI INC DI DEC CX
;修改地址指针 ;修改计数初值
NEG指令是对指令中的操作数取补,再将结果送回。因 对一个操作数求2的补码,相当于0减去此操作数,所以NEG 指令执行的也是减法操作。
单片机编程入门学习C语言和汇编语言
单片机编程入门学习C语言和汇编语言随着科技的发展,单片机已经成为嵌入式系统中不可或缺的部分。
单片机是一种集成电路芯片,具有控制和处理功能,广泛应用于各个领域。
要想进行单片机编程,学习C语言和汇编语言是必不可少的。
本文将介绍单片机编程入门所需的C语言和汇编语言知识,帮助读者快速掌握单片机编程技能。
一、C语言入门C语言是一种高级程序设计语言,特点是语法简洁、灵活、易学易用。
它广泛应用于软件开发和嵌入式系统中。
下面是C语言入门的一些基础知识点:1. 数据类型C语言提供了多种数据类型,包括整数类型、浮点数类型、字符类型等。
在编程时需要根据具体需求选择适当的数据类型。
2. 运算符C语言支持各种运算符,如算术运算符、关系运算符、逻辑运算符等。
掌握运算符的使用方法对于编程非常重要。
3. 控制语句C语言提供了多种控制语句,如条件语句、循环语句和跳转语句。
通过控制语句可以控制程序的执行流程。
4. 数组和指针数组和指针是C语言中非常重要的概念。
数组用于存储一系列相同类型的数据,指针用于存储变量的地址。
5. 函数函数是C语言中的重要组成部分,可以将一段逻辑代码封装成函数,实现代码的模块化和重用。
通过学习以上C语言基础知识,读者可以初步掌握C语言编程的能力,并开始进行单片机编程的学习。
二、汇编语言入门汇编语言是一种低级程序设计语言,与计算机硬件直接相关。
通过汇编语言,程序员可以直接控制计算机的底层操作。
下面是汇编语言入门的一些基础知识点:1. 寄存器在汇编语言中,寄存器是存储数据的重要部件。
不同的CPU架构提供了不同的寄存器,如AX、BX、CX等。
程序员需要了解不同寄存器的功能和使用方法。
2. 指令汇编语言以指令的形式进行操作。
每个指令对应一条机器指令,如MOV、ADD、SUB等。
程序员需要学会各个指令的使用方法。
3. 内存管理程序需要使用内存来存储数据和指令。
汇编语言提供了各种内存管理指令,如MOV、LEA、LDA等。
汇编语言运算符
汇编语言运算符汇编语言是一种低级语言,直接操作计算机硬件的指令和数据。
运算符是汇编语言中常用的操作符号,用于执行各种数学和逻辑运算。
本文将介绍汇编语言中常见的运算符及其使用方式。
一、算术运算符1. 加法运算符(ADD):将两个数相加,并将结果存储在目标操作数中。
例如,ADD AX, BX表示将寄存器AX和BX中的值相加,结果存储在AX中。
2. 减法运算符(SUB):将第二个操作数的值从第一个操作数中减去,并将结果存储在目标操作数中。
例如,SUB AX, BX表示将寄存器BX的值从AX中减去,结果存储在AX中。
3. 乘法运算符(MUL):将两个数相乘,并将结果存储在目标操作数中。
例如,MUL AX, BX表示将寄存器AX和BX中的值相乘,结果存储在AX中。
4. 除法运算符(DIV):将第一个操作数的值除以第二个操作数,并将商存储在目标操作数中。
例如,DIV AX, BX表示将AX的值除以BX,商存储在AX中,余数存储在DX中。
二、逻辑运算符1. 与运算符(AND):对两个操作数进行逻辑与运算,并将结果存储在目标操作数中。
例如,AND AX, BX表示将寄存器AX和BX中的值进行逻辑与运算,结果存储在AX中。
2. 或运算符(OR):对两个操作数进行逻辑或运算,并将结果存储在目标操作数中。
例如,OR AX, BX表示将寄存器AX和BX中的值进行逻辑或运算,结果存储在AX中。
3. 非运算符(NOT):对一个操作数进行逻辑非运算,并将结果存储在目标操作数中。
例如,NOT AX表示对寄存器AX的值进行逻辑非运算,结果存储在AX中。
4. 异或运算符(XOR):对两个操作数进行逻辑异或运算,并将结果存储在目标操作数中。
例如,XOR AX, BX表示将寄存器AX和BX 中的值进行逻辑异或运算,结果存储在AX中。
三、移位运算符1. 左移运算符(SHL):将一个操作数的二进制位向左移动指定的位数,并将结果存储在目标操作数中。
汇编语言的数据和表达式
例: MOV AX,0FFH MOV BX,20 .RADIX 16 MOV CX,0FF MOV DX,20D
注意:B_VAR1和W_VAR2都是给变量增加类型属性,并不另外占用存储单元 (2)与标号连用 用来给相连的指令地址(即标号)定义一个新的标号,并指定新的距离属性。 例: DISTFAR LABEL FAR
DISTNEAR: MOV EAX,EBX 给近标号DISTNEAR取一个新的标号名DISTFAR,距离属性修改为FAR。当其它代码
;(AL)=00001011B
MOV AL,11100001B OR 10000101B
;(AL)=11100101B
MOV AL,10111011B XOR 00100100B
;(AL)=10011111B
14
三、关系运算符
包括EQ、NE、LT、GT、LE、GE共六种; 可对常量或同一段内的存储器地址进行比较运算; 若条件满足,运算结果为真,输出结果为全“1”; 若不满足条件,运算结果为假,输出结果为全“0”。 例: MOV BX,10 EQ 1010B
COUNT EQU ECX
;为ECX重新取名
注意:该等值语句只作为符号定义用,不产生任何目标代码,也不占用存储单元,并 且不能是程序中曾经定义过的符号名。
3
(2) “=”伪指令
“=”伪操作命令与EQU具有相同的功能,但它定义 的符号允许重新定义。
例:PERSON=10 ;定义PERSON等于10 PERSON=PERSON+5 ;重新定义PERSON等于15
c语言和汇编运算对应关系
c语言和汇编运算对应关系【原创实用版】目录1.C 语言和汇编语言的概述2.C 语言和汇编语言的运算符对应关系3.C 语言和汇编语言的运算符例子正文C 语言和汇编语言都是计算机编程中常用的语言,它们各自有各自的特点和应用场景。
C 语言是一种高级编程语言,它具有简单、易学、易用的特点,广泛应用于操作系统、嵌入式系统、游戏开发等领域。
汇编语言是一种低级编程语言,它与计算机硬件的操作紧密相关,主要应用于系统编程、驱动程序开发等领域。
C 语言和汇编语言的运算符对应关系如下:1.算术运算符:- 加法:C 语言中的“+”对应汇编语言中的“ADD”;- 减法:C 语言中的“-”对应汇编语言中的“SUB”;- 乘法:C 语言中的“*”对应汇编语言中的“MUL”;- 除法:C 语言中的“/”对应汇编语言中的“DIV”;- 取模:C 语言中的“%”对应汇编语言中的“MOD”。
2.关系运算符:- 大于:C 语言中的“>”对应汇编语言中的“CMP”;- 小于:C 语言中的“<”对应汇编语言中的“CMP”;- 大于等于:C 语言中的“>=”对应汇编语言中的“CMP”;- 小于等于:C 语言中的“<=”对应汇编语言中的“CMP”。
3.逻辑运算符:- 与:C 语言中的“&&”对应汇编语言中的“AND”;- 或:C 语言中的“||”对应汇编语言中的“OR”;- 非:C 语言中的“!”对应汇编语言中的“NOT”。
4.位运算符:- 按位与:C 语言中的“&”对应汇编语言中的“AND”;- 按位或:C 语言中的“|”对应汇编语言中的“OR”;- 按位异或:C 语言中的“^”对应汇编语言中的“XOR”;- 按位非:C 语言中的“~”对应汇编语言中的“NOT”。
5.赋值运算符:- 赋值:C 语言中的“=”对应汇编语言中的“STORE”;- 增加赋值:C 语言中的“ += ”对应汇编语言中的“ADD STORE”;- 减少赋值:C 语言中的“ -= ”对应汇编语言中的“SUB STORE”。
汇编语言基础
汇编语言基础(一)汇编语言的基本语法1.字符集(1)英文字符:A~Z a~z(2)数字字符:0~9(3)算术运算符:+ - * /(4)关系运算符:<=>(5)分隔符: ,: ;() [] ’ (空格) TAB(6)控制符: CR(回车) LF(换行) FF(换页)(7)其他字符: & - (下划线)?. $ @ ! %在用汇编语言编写程序时,程序中的指令助记符、标识符、运算符、分隔符等,均应由上述字符集中的字符组成。
使用其他字符均为非法字符,8086/8088宏汇编程序不能识别和翻译。
2.标识符标识符在程序中用作变量名、常量名、记录名、段名等。
规定如下:(1)标识符由1~31个字符组成,打头的字符必须是字母、?(问号)、@和 - (下划线)。
(2)从第2个字符开始。
组成标识符的字符可以是字母、数字、@、?、 - 等,不能使用其他字符。
3.保留字8086/8088中指令助记符、伪指令、寄存器名、表达式运算符及属性操作符等都是系统的保留字。
保留字不能用作标识符。
4.语句80x86宏汇编语言有三种基本语句,即指令语句、伪指令语句和宏指令语句。
指令语句对应着机器的一种操作,汇编时产生一个目标代码;伪指令是为汇编程序提供编译信息、指标汇编程序做某些操作的语句,它不产生目标代码,与机器的操作无关。
一条语句在源程序中一般只占一行,长度超过一行时必须用续行符号&。
5.汇编语言程序结构用汇编语言编写的源程序,在结构上具有以下特点:(1)由若干逻辑段组成,各逻辑段由伪指令语句定义和说明。
(2)整个源程序以END伪指令结束。
(3)每个逻辑段由语句序列组成,各语句可以是指令语句、伪指令语句、宏指令语句、注释语句或空行语句。
(二)汇编语言和汇编处理过程计算机完成汇编任务是由一个称为汇编程序(Assembler)软件工具实现的。
汇编程序是一种系统软件。
汇编程序加工的对象是汇编语言程序,称为源程序,而汇编后产生的结果是机器语言程序,称为目标程序。
4. 汇编语言
移位运算符的几个例子
Num = 11011011b ︰ mov ax,num shl 3 mov bx,num shr 2 add dx,num shr 6 确定一下,源操作数的具体值是多少? 注意:目的操作数的类型。
下标运算符
[]表示加法,把表达式1和表达式2相加后形成一个 存储器操作数地址。 Mov ax,da_word[20h] Mov ax,da_word+20h 下标[]中的20h表示数组的下标变量,也可以用寄 存器来存放下标变量。 Mov ax,array[bx][si] Mov ax,array[bx+si] Mov ax,[array+bx][si] Mov ax,[array+si][bx] Mov ax,[array+bx+si]
标号距离属性的类型
Near(近):此标号只能被标号所在段的转移 和调用指令所访问。(即段内转移) Far(远):此标号可被其它段的转移和调用 指令所访问。(即段间转移)
段距离属性的设置方法
隐含方式:当在指令语句中,使用标号后, 它就隐含有near属性。如: sub1:mov ax,30h 使用label伪操作 格式:名称 label 类型
如何区别指令和运算符(shl,shr)
在格式上的区别。 指令:shl(shr) dest [,cl] 逻辑移位运算符:表达式 shl(shr) 次数 在执行功能和效果上是相同的。 当次数>=16时,则结果恒为零,为什么? 移位运算符是在程序汇编时完成移位的。 移位指令是在程序运行、执行时完成移位的。
Mov ax,0ab37h Add dl,63h 源操作数的寻址方式为立即数寻址。 可以为8位或16位的二进制数。
让常数作为存储器操作数的位移量
SAL SHL SOL汇编语言指令汇总
SAL SHL SOL汇编语言指令汇总1.算术运算符ADC:带进位加法ADD:二进制数加法DEC:减一DIV:无符号数除法IDIV:带符号数(整数)除法IMUL:带符号数(整数)乘法INC:加一MUL:无符号数乘法NEG:求补SBB:带借位减法SUB:二进制减法XADD:交换并相加2.ASCII-BCD转换AAA:加后ASCII调整AAD:除前ASCII调整AAM:乘后ASCII调整AAC:减后ASCII调整DAA:加后十进制调整DAS:减后十进制调整3.移位RCL:带进位循环左移RCR:带进位循环右移ROL:循环左移ROR:循环右移SAL:算术左移SAR:算术右移SHL:逻辑左移SHR:逻辑右移SHLD:双精度左移SHRD:双精度右移4.比较BSF/BSR:位扫描BT/BTC/BR/BB:位测试CMP:比较CMPSN:串比较CMPXCHG:比较交换CMPXCHG8B:比较并换?lt;br>TEST:测试位5.数据传送LDS:装如数据段寄存器LEA:装入有效地址LES:装入附加段寄存器LODS:从串取LSS:装入堆栈段寄存器MOV:传送数据MOVS:串传送MOVSX:带符号扩展传送MOVZX:带零扩展传送STOS:存入串XCHG:交换XLAT:换码6.标志操作CLC:清除位标志CLD:清除方向标志CLI:清除中断标志CMC:进位标志求反LAHF:标志送AH POPF:标志出栈PUSHF:标志进栈SAHF:AH送标志寄存器STC:进位标志置1 CTD:方向标志置1 STI:中断标志置17.输入/输出IN:输入字节或字INSN:串输入OUT:输出字节或字OUTSN:穿输出8.逻辑操作AND:逻辑与NOT:逻辑非OR:逻辑或XOR:异或9.循环LOOP:循环直到完成LOOPE:相等时循环LOOPZ:为零是循环LOOPNE:不相等时循环LOOPPNZ:不为零是循环LOOPPNEW:不相等时循环LOOPNZW:不为零时循环。
subb运算符
subb运算符(一)什么是subb运算符在计算机科学中,subb是一种基本的算术运算符。
它表示“减法并借位”的意思。
在二进制数的运算中,当被减数小于减数时,就需要向高位借1。
subb运算符就负责进行这种减法运算并自动处理借位操作。
(二)subb运算符的语法在汇编语言中,subb运算符的语法格式通常如下所示:subb 目标操作数,源操作数其中,目标操作数是被减数,源操作数是减数。
subb运算符的操作数可以是寄存器、内存单元或立即数。
(三)subb运算符的使用subb运算符通常用于累加器的减法运算中。
在8086汇编语言中,累加器是8位或16位的寄存器。
当执行subb运算符时,累加器中的值减去源操作数的值,并将结果送回累加器中。
subb运算符还可以与其他寄存器或内存单元结合使用,从而进行更复杂的算术运算。
例如,可以使用subb运算符将两个16位数相加,并将结果存储在另一个寄存器或内存单元中。
(四)subb运算符的应用subb运算符在汇编语言中广泛应用于各种算术运算。
它可以帮助程序员更高效地完成复杂的计算任务,从而提高程序的运行效率。
subb运算符还可以用于控制程序流程。
当进行累加器减法操作时,subb运算符会根据减法结果的正负情况修改标志寄存器的值。
程序可以通过检测标志寄存器的值来实现不同的控制流程,从而实现程序的跳转和控制。
(五)subb运算符的优化在汇编语言优化中,subb运算符也有着重要的作用。
程序员可以通过优化subb运算符的使用方式,从而减少程序的执行时间和空间开销。
例如,当累加器的值为0时,程序员可以直接将目标操作数的值设置为源操作数的补码,并将进位标志清零。
这样可以节省程序运算时间和空间,从而提高程序的效率。
总之,subb运算符在汇编语言中是一种基本的算术运算符,它可以帮助程序员高效地完成复杂的数值计算和程序控制任务。
在实际编程中,程序员需要根据具体的需求和场景,灵活使用subb运算符,并进行相应的优化和改进。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
STRING1 DB‘STRING’ STRING2 DW‘ST’,‘RI’,‘NG’ STRING3 DD ‘ST’,‘RI’,‘NG’ STRING2 STRING3 54 53 53 54 49 52 52 49 47 4E 4E 47
54 53 00 00 49 52 00 00 47 4E 00 00
第8章 汇编语言基础
4.数值返回运算符(续)
LENGTH与SIZE运算符 LENGTH运算符 返回数组变量的元素个数。 如果变量用DUP定义,Length为外层DUP的 值。 如果没有DUP定义,结果为1。 SIZE运算符 数组变量所占的总字节数。
例12: DATA VAR1 VAR2 VAR3 VAR4 DATA
第8章 汇编语言基础
5. 属性运算符 PTR: 类型 PTR 地址表达式 类型可以是:BYTE ,WORD,DWORD 或NEAR,FAR 仅在当前语句中有效,是一种临时设置。
DA_BYTE DB 20H DUP(0) DA_WORD DW 10H DUP(0) … MOV WORD PTR DA_BYTE [10H], AX ADD BYTE PTR DA_WORD [DI], BL INC BYTE PTR [SI] SUB WORD PTR [BX],30H JMP FAR PTR SUB1
第8章 汇编语言基础
8.4.1 符号定义语句 1.等值语句
8.4 伪指令语句
格式: 符号 EQU 表达式 表达式:常数或数值表达式 地址表达式 变量或标号 CONST EQU 10 ADR1 EQU DS:[BP+14H] ADR2 EQU CONST +10 COUN EQU VAR 为变量名VAR另定义一个别名 同一符号不能用EQU重新定义。 汇编时,作为替代符号用,不产生目标代码,不占 有存储单元。
第8章 汇编语言基础
8.4.2 数据定义语句 格式: 变量名 DB/DW/DD 表达式1,表达式2,...
保留存储空间,并可以完成数据的初始化。
字节
BYTE 1
DB
字
双字
WORD
DWORD
2
4
DW
DD
DQ DT
四字
十字节
QWORD
TBYTE
8
10
第8章 汇编语言基础
例15:
DATA
DA1
SEGMENT
DA_W1
DA_W2
DW 10
DW 10
DUP(4)
DUP(-1,1)
操作符DUP可以嵌套使用: DA_B3 DB 10H DUP(4 DUP(3),8)
第8章 汇编语言基础
作业:
1、定义一个数组,类型为字节,其中存放 “ABCDEFGH”。 2、定义一个字节区域,第一个字节为10,其 后连续存放10各初值为0的连续字节。
字符串必须用引号括起来 DB时一个字符串可以连续书写小于255个字;
DW、DD时每一个字符串表达式由1-2个字符构成;
STRING1 DB STRING3 DD
‘STRING’ ‘ST’,‘RI’,‘NG’
STRING2 DW ‘ST’,‘RI’,‘NG’
第8章 汇编语言基础
例16:
STRING1
注:若真设为全1,假设为全0。 比较时,若为常数按无符号数比较,如果是变 量按偏移量比较。
第8章 汇编语言基础
例 8: MOV AX , 0FH EQ 1111B MOV DX , 05H GE 1111B 等价于: MOV AX, 0FFFFH MOV DX, 0
第8章 汇编语言基础
例9:DATA SEGMENT ORG 10H NUM1=1234 NUM2=1234H DA_BYTE DB 10H DUP(0) DA_WORD DW 10H DUP(0)
CONST DATA1 DATA2 DATA
MOV MOV MOV MOV MOV
AH , 0ABH AL , 0CDH BH , 0 BL , 30H CL , 68H
DATA1) DATA2) SHL 3)
第8章 汇编语言基础
7.运算符的优先级
优先级别 (最高) 1 2 3 4 5 6 7 8 9 (最低) 10 运算符 LENGTH , SIZE PTR , OFFSET, SEG , TYPE , THIS HIGH , LOW +, – (单项运算符) * , / , MOD , SHR , SHL +, – EQ , NE , LT , LE , GT , GE NOT AND OR , XOR
DA_VAR1 DW NUM2+DA_BYTE GT NUM1+DA_WORD
DA_VAR2 DB NUM1 LE NUM2 DATA ENDS ... MOV AX , NUM1 LT NUM2 MOV BL , NUM1 GE NUM2 MOV CX , DA_WORD GT DA_BYTE
第8章 汇编语言基础
第8章 汇编语言基础
8.4.1 符号定义语句(续) 2. 等号语句 格式: 符号 = 表达式 CONT=5 NUM=10H NUM=NUM+20H COUNT=VAR ;COUNT是变量VAR的 别名 COUNT=NUM ;COUNT是常数NUM的别 名 表达式形式同上,但可多次重新定义同一符号。
DA1 DA2
DATA
AX , 7A4EH BX , 7A4EH SI , 30H CX , 7A9EH DI , 50H DX , 34H
第8章 汇编语言基础
4.数值返回运算符(续)
TYPE 运算符
类型属性 变量 BYTE WORD DWORD 运算结果
1 2 4 -1 -2
标号
NEAR FAR
DA_WORD1
DB
10H,20H,30H,40H
DW 0A34H
DA_WORD2
DA_DWORD
DW 1234H,5678H,9ABCH
DD 12345678H,9ABCDEFH
第8章 汇编语言基础
8.4.2 数据定义语句(续) 格式: 变量名 DB/DW/DD 表达式1,表达式2,... 表达式:字符/字符串
第8章 汇编语言基础
5.THIS常与等值语句EQU一起用,形成新变量名 或标号,使它们具有THIS后所指的类型,而段基 值和偏移量与紧接的变量名或标号相同。
例14: DATA _BYTE DATA _WORD JUMP_FAR JUMP_NEAR : EQU THIS BYTE DW 20H DUP(0) EQU THIS FAR XOR AX, AX
第8章 汇编语言基础
例10:假设DATA的段基值是7A4EH
DATA SEGMENT ORG 30H DB 20H DUP(12H) DW DA1 ... ENDS ... MOV MOV AX , SEG DA1 MOV MOV BX , SEG DA2 MOV MOV SI , OFFSET DA1 MOV MOV CX , DA2 MOV MOV DI , OFFSET DA2 MOV DX , OFFSET DA1+4 MOV
第8章 汇编语言基础
6.分离字节运算符
HIGH LOW 表达式 表达式
分离运算对象的高字节和低字节部分。 表达式必须具有常量值,如常数、地址表达式, 不能是存储器操作数或寄存器内容。
第8章 汇编语言基础
例14: DATA SEGMENT ORG 20H EQU 0ABCDH DB 10H DUP(?) DW 20H DUP(?) ... ENDS ... MOV AH , HIGH CONST MOV AL , LOW CONST MOV BH , HIGH (OFFSET MOV BL , LOW (OFFSET MOV CL , LOW (CONST
第8章 汇编语言基础
3. 关系运算符
运算符 EQ NE LT LE GT GE 运算格式 表达式1 EQ 表达式2 表达式1 NE 表达式2 表达式1 LT 表达式2 表达式1 LE 表达式2 表达式1 GT 表达式2 表达式1 GE 表达式2 运算功能 两个表达式相等为真 两个表达式不相等为真 表达式1 < 表达式2为真 表达式1 <= 表达式2为真 表达式1 > 表达式2为真 表达式1 >= 表达式2为真
第8章 汇编语言基础
SEGMENT DB 10H DUP(0) DB 10H, 20H, 30H, 40H DW 10H DUP(‘A’, 4 DUP(3)) DB ‘COMPUTER’ ENDS ... MOV AL , LENGTH VAR1 ; MOV AH , SIZE VAR1 ; MOV BL , LENGTH VAR2 ; MOV BH , SIZE VAR2 ; MOV CL , LENGTH VAR3 ; MOV CH , SIZE VAR3 ; MOV DL , LENGTH VAR4 ; MOV DH , SIZE VAR4 ;
(AL)=10H (AH)=10H (BL)=1 (BH)=1 (CL)=10H (CH)=20H (DL)=1 (DH)=1
例13:
第8章 汇编语言基础
求数组ARRAY的各数据项的累加和,从数组最后一 个数据项开始进行累加。 ARRAY DW 06H DUP(4) ... XOR AX , AX MOVSI , OFFSET ARRAY ADD SI , SIZE ARRAY - TYPE ARRAY MOVCX , LENGTH ARRAY LOP: ADD AX , [SI] SUB SI , TYPE ARRAY LOOP LOP
用数字形式表示变量和标号的类型属性
第8章 汇编语言基础
例11: DA_BYTE DB DA_WORD DW DA_DWORD DD ... MOV AL , TYPE MOV BL , TYPE MOV CL , TYPE ... MOV AL , 1 MOV BL , 2 MOV CL , 4 12H 3456H 789AH DA_BYTE DA_WORD DA_DWORD