汇编语言运算符
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循环。
- 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