汇编语言中ptr的含义及作用
汇编语言中各寄存器的作用
汇编语言中各寄存器的作用汇编语言中各寄存器的作用4个数据寄存器(EAX、EBX、ECX和EDX)2个变址和指针寄存器(ESI和EDI) 2个指针寄存器(ESP和EBP)6个段寄存器(ES、CS、SS、DS、FS和GS)1个指令指针寄存器(EIP) 1个标志寄存器(EFlags)1、数据寄存器数据寄存器主要用来保存操作数和运算结果等信息,从而节省读取操作数所需占用总线和访问存储器的时间。
32位CPU有4个32位的通用寄存器EAX、EBX、ECX和EDX。
对低16位数据的存取,不会影响高16位的数据。
这些低16位寄存器分别命名为:AX、BX、CX和DX,它和先前的CPU中的寄存器相一致。
4个16位寄存器又可分割成8个独立的8位寄存器(AX:AH-AL、BX:BH-BL、CX:CH-CL、DX:DH-DL),每个寄存器都有自己的名称,可独立存取。
程序员可利用数据寄存器的这种”可分可合”的特性,灵活地处理字/字节的信息。
寄存器AX和AL通常称为累加器(Accumulator),用累加器进行的操作可能需要更少时间。
累加器可用于乘、除、输入/输出等操作,它们的使用频率很高;寄存器BX称为基地址寄存器(Base Register)。
它可作为存储器指针来使用;寄存器CX称为计数寄存器(Count Register)。
在循环和字符串操作时,要用它来控制循环次数;在位操作中,当移多位时,要用CL来指明移位的位数;寄存器DX称为数据寄存器(Data Register)。
在进行乘、除运算时,它可作为默认的操作数参与运算,也可用于存放I/O的端口地址。
在16位CPU中,AX、BX、CX和DX不能作为基址和变址寄存器来存放存储单元的地址,但在32位CPU中,其32位寄存器EAX、EBX、ECX和EDX不仅可传送数据、暂存数据保存算术逻辑运算结果,而且也可作为指针寄存器,所以,这些32位寄存器更具有通用性。
2、变址寄存器32位CPU有2个32位通用寄存器ESI和EDI。
常用汇编指令
常用汇编指令汇编语言是一种低级机器语言的抽象表示,通过使用汇编指令可以编写出与硬件相关的程序。
在计算机科学领域中,汇编指令是非常重要的,是理解计算机底层原理和实现的关键。
本文将介绍一些常用的汇编指令,以帮助读者更好地理解和应用这些指令。
一、数据传输指令1. MOV指令:MOV指令用于将数据从一个位置复制到另一个位置。
例如,MOV AX, BX将寄存器BX的内容复制到AX中。
2. LEA指令:LEA指令用于将内存地址加载到寄存器中。
例如,LEA BX, [SI+10]将[S1+10]的内存地址加载到寄存器BX中。
3. PUSH指令:PUSH指令用于将数据压入栈中。
例如,PUSH AX将AX中的数据压入栈中。
4. POP指令:POP指令用于从栈中弹出数据。
例如,POP BX将栈中的数据弹出到BX中。
二、算术运算指令1. ADD指令:ADD指令用于将两个操作数相加,并将结果存储在目标操作数中。
例如,ADD AX, BX将BX的值加到AX中。
2. SUB指令:SUB指令用于将源操作数的值从目标操作数中减去,并将结果存储在目标操作数中。
例如,SUB AX, BX从AX中减去BX的值。
3. MUL指令:MUL指令用于将源操作数与累加器中的值相乘,并将结果存储在累加器中。
例如,MUL BX将累加器的值与BX相乘。
4. DIV指令:DIV指令用于将累加器的值除以源操作数,并将商存储在累加器中,余数存储在另一个寄存器中。
例如,DIV BX将累加器的值除以BX。
三、逻辑运算指令1. AND指令:AND指令用于对两个操作数进行逻辑与运算,并将结果存储在目标操作数中。
例如,AND AX, BX将AX与BX进行逻辑与操作。
2. OR指令:OR指令用于对两个操作数进行逻辑或运算,并将结果存储在目标操作数中。
例如,OR AX, BX将AX与BX进行逻辑或操作。
3. NOT指令:NOT指令用于对操作数进行逻辑非运算,并将结果存储在目标操作数中。
《汇编语言》学习笔记6——伪指令
《汇编语⾔》学习笔记6——伪指令1.伪指令⼜称伪操作,即不能像汇编指令⼀样⽣成可执⾏的⼆进制机器代码,⽽是在汇编程序对汇编语⾔源程序进⾏汇编(编译)期间,由汇编程序执⾏。
它与C中的说明性语⾔的含义类似,起到说明作⽤,⽤来指出程序分段、数据定义、存储分配、程序开始和结束等信息,这些信息在汇编(编译)完成后就不⽤了。
但程序中没伪指令,则系统就⽆法完成编译。
2.段定义伪指令:⽤来定义各种类型的段 1.格式:段名 SEGMENT [类型参数] ...... 段名 ENDS 1.其中SEGMENT和ENDS必须成对出现,表⽰段的开始和结束。
⼀般的,段名和段的意义⼀致,便于识别。
2.段名实际就是段地址,在汇编过程中,系统给出具体的地址值,⼀个段必须有⼀个名字来标识。
3.参数是可选项(可有可⽆),⽤于指出段的边界、段的组合、类别标识,⼀般⽤于多模块程序设计中。
2.类型参数 1.定位类型 PARA 该段的起始地址必须为⼩段的⾸地址,即起始地址的16进制数最低位为0 BYTE 该段可以从任意地址开始 WORD 该段必须从字边界开始,即起始地址为偶数 DWORD 该段必须从双字边界开始,即起始地址的16进制数为最低应为4的倍数 PAGE 该段必须从页边界开始,即起始地址的16进制数最低两位为00(能被256整除) 若不指定定位类型,系统默认为PARA 2.组合类型 PRIVATE 该段为私有段,连接时不与其他同名段合并 PUBLIC 连接时可与其他模块中的同名段按顺序连接成⼀个段 COMMON 表⽰该段与其他模块中的同名段有相同的起始地址,如果连接将产⽣覆盖,连接后段的长度为同名段中的最长者 STACK 表⽰该段为堆栈段 AT 表达式 该段直接定位在表达式指出的位置上 若不指定组合类型,默认为PRIVATE 3.类型标识:在引号中给出段的类型名。
在连接时,类别标识相同的段放在连续的存储区中。
(如:"STACK"⽤啦标识该段为堆栈段) 4.END:结束标记,若碰到伪指令END则停⽌编译3.ASSUME伪指令:⽤于指明段寄存器与段的对应关系 1.格式:ASSUME 段寄存器:段名,[段寄存器:段名,段寄存器:.....]【[]中标识可选项】 2.除了代码段寄存器CS不能⽤MOV指令赋值外,其他段寄存器都可⽤MOV指令进⾏初始化。
汇编语言指令详解
汇编语言指令详解汇编语言是一种低级语言,它直接操作计算机的硬件。
与高级语言相比,汇编语言更具操作性,可以更精确地控制计算机的执行过程。
在编写汇编语言程序时,我们需要使用指令来完成各种操作,并且对不同的指令进行详细的了解。
本文将详细介绍一些常用的汇编语言指令及其功能。
一、数据传输指令数据传输指令用于在寄存器间传输数据或将数据从寄存器传送到内存中。
常用的数据传输指令包括MOV、LDA、STA等。
MOV指令用于将数据从一个寄存器传送到另一个寄存器。
例如,MOV AX, BX表示将寄存器BX中的数据传送到寄存器AX中。
LDA指令用于将一个内存单元的数据传送到累加器中。
例如,LDA 1000H将内存单元1000H中的数据传送到累加器中。
STA指令用于将累加器的数据传送到一个内存单元中。
例如,STA 2000H将累加器中的数据传送到内存单元2000H中。
二、算术运算指令算术运算指令用于对数据进行加、减、乘、除等运算操作。
常用的算术运算指令包括ADD、SUB、MUL、DIV等。
ADD指令用于将两个操作数相加,并将结果存储在目的操作数中。
例如,ADD AX, BX表示将寄存器AX和寄存器BX的数据相加,并将结果存储在寄存器AX中。
SUB指令用于将目的操作数减去源操作数,并将结果存储在目的操作数中。
例如,SUB AX, BX表示将寄存器AX减去寄存器BX的数据,并将结果存储在寄存器AX中。
MUL指令用于执行无符号整数乘法运算。
例如,MUL AX, BX表示将寄存器AX和寄存器BX的数据相乘,并将结果存储在寄存器AX 中。
DIV指令用于执行无符号整数除法运算。
例如,DIV AX, BX表示将寄存器AX的数据除以寄存器BX的数据,并将商存储在寄存器AX 中,余数存储在寄存器DX中。
三、逻辑运算指令逻辑运算指令用于对数据进行逻辑操作,如与、或、非、位移等。
常用的逻辑运算指令包括AND、OR、NOT、SHL等。
AND指令用于对两个操作数执行位与操作,并将结果存储在目的操作数中。
汇编 第四章伪指令及汇编语言源程序结构
MOV AL, BUF1
ADD AL, BUF2 MOV SUM, AL
;取第一个加数
;两数加 ;和放入SUM单元
3
伪指令(指 示性)语句: 提供相关辅 助信息。
指令性语句: 完成一定功 能,能翻译 成机器码。
伪指令语句
DATA SEGMENT ;DATA段定义开始 BUF1 DB 34H BUF2 DB 27H SUM DB ? DATA ENDS ;DATA段定义结束 CODE SEGMENT ;CODE段定义开始 ASSUME CS:CODE ASSUME DS:DATA ;段性质规定 START: MOV AX,DATA MOV DS,AX ;给DS赋值 MOV AL, BUF1 ;取第一个加数 ADD AL, BUF2 ;两数加 MOV SUM, AL ;和放入SUM单元 MOV AH,4CH INT 21H ;返回DOS CODE ENDS ;CODE段定义结束 END START ;源程序结束
14
二、= 等号伪指令
格式:符号名 = 表达式 功能:为常量、表达式及其他各种符号定义一个等价的符号 名,并能对所定义的符号多次重复定义,且以最后一次定义 的值为准。 例:COST = 20 M = MOV LOST = COST+10 ;30→LOST M = ADD ;M=ADD 注 : “ = ” 伪 指 令 的 格 式 和 功 能 与 EQU 类 似 。 二者区别:在同一程序中,“=”可以对一个符号重 复定义,EQU不能对同一符号重复定义。
26
三、变量、标号的分析运算和合成运算
例:DATA SEGMENT A DB ‘ABCDEF’ B DW 10 DUP(1,2DUP(2)) C DB 3,20 DUP(0) DATA ENDS ┆ MOV AX,LENGTH A ;1→AX MOV BX,LENGTH B ;10→BX MOV CX,LENGTH C ;1→CX ┆
汇编语言中PTR的含义及作用
汇编语言中PTR的含义及作用在汇编语言中,PTR是一个非常重要的指令。
PTR是Pointer(指针)的缩写,用于表示和操作内存地址。
它可以帮助程序员直接访问和操纵内存中的数据,提供了更高级别的内存操作功能。
一、PTR指令的含义PTR指令用于设置和操作指针寄存器。
指针寄存器是用于存储内存地址的寄存器,它们可以指向内存中的某个特定位置,从而使程序能够读取或写入该内存位置的数据。
在汇编语言中,常用的指针寄存器有DS(数据段寄存器)、ES(目标段寄存器)、SS(堆栈段寄存器)等。
二、PTR指令的作用1. 读取和写入内存数据:PTR指令允许程序员通过指针寄存器直接读取或写入内存数据。
通过设置PTR指令的操作数为目标内存地址,程序可以将数据加载到寄存器中,或者将寄存器中的数据存储到目标内存地址中。
示例:```assemblyMOV AX, PTR[BP+DI] ; 将DS:BP+DI地址处的数据加载到AX寄存器中MOV PTR[SI], BX ; 将BX寄存器的值存储到ES:SI地址处```2. 数据传送和复制:PTR指令可以用于在不同段之间进行数据传送和复制操作。
通过设置指针寄存器的值为源和目标段的基地址,程序可以将数据从一个段复制到另一个段,实现不同段之间的数据传递。
示例:```assemblyMOV CX, 200 ; 设置传送数据的长度MOV DS, SRC_SEG ; 设置源段基地址MOV ES, DEST_SEG ; 设置目标段基地址MOV PTR[DI], ES:[SI] ; 复制ES:SI地址处的数据到ES:DI地址处```3. 字符串操作:PTR指令也常用于字符串操作,比如字符串的拷贝、连接和比较等。
通过设置指针寄存器和偏移地址,程序可以对字符串进行各种操作。
示例:```assemblyMOV CX, 100 ; 设置循环计数器MOV DS, SRC_SEG ; 设置源段基地址MOV ES, DEST_SEG ; 设置目标段基地址MOV SI, OFFSET SRC_STR ; 设置源字符串的偏移地址MOV DI, OFFSET DEST_STR; 设置目标字符串的偏移地址REP MOVSB ; 将源字符串复制到目标字符串```四、使用PTR指令的注意事项1. 指针寄存器的值必须正确设置,确保指向有效的内存区域,否则会导致程序运行错误或崩溃。
烟台大学《汇编语言程序设计》期末考试复习题及参考答案
B. 03200H
C. 20120H
D. 21200H
答 案:C
48、下列指令中不能将AX清0的指令是( )。(2分)
A. SUB AX,AX
B. TEST AX,0
C. XOR AX,AX
D. AND AX,0
答 案:B
49、设AL=0A8H,CX=2,CF=1,执行RCLAL,CL指令后,AL中的值为( )(2分)
A. 80H
B. 160H
C. 80
D. 160
答 案:D
3、设AL=0AH,下列指令执行后能使AL=05H的是( )(2分)
A.NOT AL
B.AND AL,0FH
C.XOR AL,0FH
D.OR AL,0FH
答 案:C
4、CPU要访问的某一存储单元的实际地址称(2分)
A.段地址
B.偏移地址
C.物理地址
CBW
(2分)
A. AX=0FF82H
B. AX=8082H
C. AX=0082H
D. AX=0F82H
答 案:A
31、下面的数据传送指令中,错误的操作是( )(2分)
A. MOV SS:(BX+DI),1000H
B. MOV DX,1000H
C. MOV WORDPTR(BX),1000H
D. MOV DS,2000H
add ax,0f510h
A. of=1
B. cf=1
C. sf=1
D. zf=1
答 案:C
12、JMPWORDPTR(DI)的源操作数的物理地址是( )(2分)
A. 16D×(DS)+(BX)+(SI)
汇编语言学习第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
constptr的用法
constptr的用法引言:在C++编程中,指针是一种非常重要的数据类型,它允许我们直接访问内存中的数据。
然而,指针的使用也带来了一些问题,比如悬挂指针、野指针等。
为了解决这些问题,C++引入了constptr,一种更安全、更方便的指针类型。
本文将详细介绍constptr的用法。
一、constptr的定义和特性constptr是C++11引入的一种新的智能指针类型,它可以保证在任何情况下都不会为空,从而避免了悬挂指针和野指针的问题。
constptr的特性如下:1. constptr永远不会为空。
当constptr被初始化时,它必须指向一个有效的对象;当对象被删除时,constptr会自动变为nullptr。
2. constptr不支持拷贝和赋值操作。
这意味着我们不能通过拷贝或赋值的方式复制一个constptr。
3. constptr支持移动语义。
我们可以通过std::move函数将一个constptr的所有权转移到另一个constptr。
二、constptr的使用方法1. 创建constptr:我们可以使用make_constptr函数来创建一个constptr。
例如,我们可以这样创建一个int类型的constptr:auto p = make_constptr<int>(10);2. 访问constptr指向的对象:我们可以使用*和->操作符来访问constptr指向的对象。
例如,我们可以这样访问上面创建的constptr指向的对象:cout << *p << endl;3. 修改constptr指向的对象:由于constptr的特性,我们不能修改constptr指向的对象。
如果我们试图这样做,编译器会报错。
4. 转移constptr的所有权:我们可以使用std::move函数来转移constptr的所有权。
例如,我们可以这样将一个constptr的所有权转移到另一个constptr:auto q = std::move(p);三、constptr的优点1. 安全性:由于constptr永远不会为空,所以我们不需要担心悬挂指针和野指针的问题。
《微机原理及汇编语言》习题
第一章思考题与习题1.1计算机的发展到目前为止经历了几个时代?每个时代的特点是什么?1.2计算机的特点表现在哪些方面?简述计算机的应用领域。
1.3冯·诺依曼型计算机的结构由哪些部分组成?各部分的功能是什么?分析其中数据信息和控制信息的流向。
1.4计算机中的CPU由哪些部件组成?简述各部分的功能。
1.5微型计算机系统主要由哪些部分组成?各部分的主要功能和特点是什么?1.6微型计算机的分类方法有哪些?1.7 什么是微型计算机的系统总线?定性说明微处理器三大总线的作用。
1.8 微型计算机的总线标准有哪些?怎样合理地加以选择?1.9 简述微型计算机的主要应用方向及其应用特点。
1.10 奔腾系列微处理器有哪些特点?与其它微处理器相比有哪些改进?1.11 解释并区别下列名词术语的含义。
(1)微处理器、微计算机、微计算机系统(2)字节、字、字长、主频、访存空间、基本指令执行时间、指令数(3)硬件和软件(4)RAM和ROM(5)机器语言、汇编语言、高级语言、操作系统、语言处理程序、应用软件(6)CMOS、BIOS、Cache芯片1.12 微型计算机系统软件的主要特点是什么?它包括哪些内容?1.12 定性比较微型计算机的内存储器和外存储器的特点及组成情况。
第二章思考题与习题2.1 简述计算机中“数”和“码”的区别,计算机中常用的数制和码制有哪些?2.2 将下列十进制数分别转化为二进制数、八进制数、十六进制数和压缩BCD数。
(1)125.74 (2)513.85 (3)742.24(4)69.357 (5)158.625 (6)781.6972.3 将下列二进制数分别转化为十进制数、八进制数和十六进制数。
(1)101011.101 (2)110110.1101(3)1001.11001 (4)100111.01012.4 将下列十六进制数分别转化为二进制数、八进制数、十进制数和压缩BCD数。
(1)5A.26 (2)143.B5(3)6AB.24 (4)E2F3.2C2.5 根据ASCII码的表示,查表写出下列字符的ASCII码。
最新汇编语言中ptr的含义及作用
汇编语言中PTR的含义及作用ptr -- pointer (指针)缩写。
汇编里面 ptr 是规定的字 (保留字)。
mov ax,bx ;是把BX寄存器“里”的值赋予AX,由于二者都是word型,不用wordmov ax,word ptr [bx];是把内存地址等于“BX寄存器的值”的地方所存放的数据,赋予ax。
由于只是给出一个内存地址,不知道希望赋予ax的,是byte还是word,所以需要用word明确指出!所以,当两个操作数的宽度不一样时,就要用到ptr。
(可以理解为,ptr是临时的类型转换,相当于C语言中的强制类型转换)也就是说*p 用汇编表示就是:dword ptr [p]*p是取p所指内存地址处的值。
(1)通过寄存器名指明要处理的数据的尺寸。
(既有寄存器,可以不用ptr来限制了,系统会自动分析的)例如:下面的指令中,寄存器指明了指令进行的是字操作:mov ax,1mov bx,ds:[0] 这个的意思是段内的偏移地址是0,段地址是DS。
详情请看本人其他日记mov ds,axmov ds:[0],axinc axadd ax,1000下面的指令中,寄存器指明了指令进行的是字节操作(因为是al):mov al,1mov al,blmov al,ds:[0]mov ds:[0],alinc aladd al,100(2)在没有寄存器名存在的情况下,既都是在内存,得用操作符 X ptr 指明内存单元的长度,X在汇编指令中可以为byte,word或者DWORD。
要不然内存是片连续的区域,操作就乱了。
例如:下面的指令中,用word ptr 指明了指令访问的内存单元是一个字单元:mov word ptr ds:[0],1inc word ptr [bx]inc word ptr ds:[0]add word ptr [bx],2下面的指令中,用byte ptr 指明了指令访问的内存单元是一个字节单元:mov byte ptr ds:[0],1inc byte ptr [bx]inc byte ptr ds:[0]add byte ptr [bx],2在没有寄存器参与的内存单元访问指令中,用word prt 或byte ptr 显性地指明所要访问的内存单元的长度是很必要的。
汇编 复习题
6. 在进行二重循环程序设计时,下列描述正确的是_____。
A.外循环初值应置外循环之外;内循环初值应置内循环之外,外循环之内A B.外循环初值应置外循环之内;内循环初值应置内循环之内C.内、外循环初值都应置外循环之外D.内、外循环初值都应置内循环之外,外循环之内1.下列数据中,有可能是八进制的数是_______。
A. 488B. 317BC.597D.1892.与十进制数56等值的二进制数是________。
AA. 111000B. 111001C. 101111D. 1101101.汇编语言是一种面向()的低级语言。
机器汇编语言程序有四种结构形式,即顺序结构,,和。
分支结构,循环,子程序1.已知:[X]补=0075H,[Y]补=0FF8BH,则[X+Y]补=________,[X-Y]补=________。
0000H,00EAH 1.Intel 8086具有16条数据线,()条地址线,寻址空间为()。
20,1M1. 设存储单元(10FF0H)=10H,(10FF1H)=20H,(10FF2H)=30H, 如从地址10FF1H中取出一个字的内容是()。
BA. 1020HB. 3020HC. 2030HD. 2010H把字1030H存放到物理地址为24A08H的字单元中,关于存储单元内容下列描述正确的是()。
A.(24A08H)=30H,(24A09H)=10H B.(24A08H)=10H,(24A09H)=30HAC.(24A07H)=30H,(24A08H)=10H D.(24A07H)=10H,(24A08H)=30H9.把‘AB’按字类型存入存储器字单元中,正确的是()。
3① DW 4241H ② DB ‘A’,‘B’③ DW ‘AB’④ DB 41H,42H5.汇编语言中的变量有多种类型属性,但错误的类型是()。
2①字节型BYTE ②字符型CHAR ③字型WORD ④双字型DWORD11.若(DS)=2000H,(BX)=0050H,(20050H)=12H,(20051H)=34H,执行MOV AX,[BX]指令后,AX寄存器的内容是_____。
汇编ptr指令
汇编ptr指令一、简介汇编语言是一种低级的计算机语言,它使用符号化的指令来操作计算机硬件。
指令是汇编语言中最基本的单元,而ptr指令则是其中一个重要的指令之一。
二、ptr指令的作用ptr指令可以将一个16位或32位的内存地址加载到一个寄存器中,或者将一个寄存器中的值写入到内存地址中。
它主要用于访问内存中的数据,包括读取和写入。
三、ptr指令的语法在汇编语言中,ptr指令有两种不同的语法形式:1. ptr type [address]这种形式将一个内存地址加载到一个寄存器中,并且需要明确指定数据类型(type)。
2. ptr [address]这种形式将一个内存地址加载到默认寄存器(DS:BX或DS:EBX)中,并且不需要明确指定数据类型。
四、ptr指令示例以下是一些常见的ptr指令示例:1. 将一个16位内存地址加载到AX寄存器中:mov ax, ptr [0x1234]2. 将一个32位内存地址加载到EAX寄存器中:mov eax, ptr [0x12345678]3. 将AX寄存器中的值写入到0x5678处:mov ptr [0x5678], ax4. 将EAX寄存器中的值写入到0x12345678处:mov ptr [0x12345678], eax五、ptr指令的注意事项在使用ptr指令时需要注意以下几点:1. 必须明确指定数据类型,否则会导致数据读取错误。
2. 内存地址必须是有效的,否则会导致程序崩溃。
3. 内存地址必须按照正确的字节顺序进行读取和写入,否则会导致数据错误。
六、总结ptr指令是汇编语言中一个非常重要的指令,它可以用于访问内存中的数据。
在使用ptr指令时需要注意数据类型、内存地址和字节顺序等方面。
熟练掌握ptr指令可以帮助程序员更好地进行汇编语言编程。
汇编jmp指令
汇编jmp指令jmp指令解释:n jmp为⽆条件转移,可以只修改IP,也可以同时修改CS和IP;n jmp指令要给出两种信息:n 转移的⽬的地址n 转移的距离(段间转移、段内短转移,段内近转移)格式:⼀.Jump short 标号这种格式的 jmp 指令实现的是段内短转移,它对IP的修改范围为 -128~127,也就是说,它向前转移时可以最多越过128个字节,向后转移可以最多越过127个字节。
⽰例:assume cs:codesgcodesg segmentstart:mov ax,0jmp short sadd ax,1s:inc axcodesg endsend start说明:上⾯的程序执⾏后, ax中的值为 1 ,因为执⾏ jmp short s 后,越过了add ax,1 ,IP 指向了标号 s处的 inc ax。
也就是说,程序只进⾏了⼀次ax加1操作。
注意:n 汇编指令jmp short s 对应的机器指令应该是什么样的呢?n 我们先看⼀下别的汇编指令和其对应的机器指令可以看到,在⼀般的汇编指令中,汇编指令中的idata(⽴即数),不论它是表⽰⼀个数据还是内存单元的偏移地址,都会在对应的机器指令中出现,因为CPU执⾏的是机器指令,它必须要处理这些数据或地址。
n 但是:当我们查看jmp short s或jmp 0008所对应的机器码,却发现了问题。
看到了吗?机器码中并不含有⽴即数。
为什么呢,解释如下n 在“jmp short 标号”指令所对应的机器码中,并不包含转移的⽬的地址,⽽包含的是转移的位移。
n 这个位移,使编译器根据汇编指令中的“标号”计算出来的。
如果我们在第⼀⾏程序后加上Mov bx,0000,你会发器机器码没变,还是EB03,为什么呢?jmp 0008对应的偏移就是0003⼤家可以回忆⼀下cpu 中指令的执⾏流程,就会发现当执⾏完EB03后,ip=ip+2=0005,⼤家注意看EB03后⾯有个03,表⽰再向后三个单位,这样就到了0008这个偏移处了。
汇编语言中ptr的含义及作用
汇编语言中PTR的含义及作用ptr -- pointer (指针)缩写。
汇编里面 ptr 是规定的字 (保留字)。
mov ax,bx ;是把BX寄存器“里”的值赋予AX,由于二者都是word型,不用wordmov ax,word ptr [bx];是把内存地址等于“BX寄存器的值”的地方所存放的数据,赋予ax。
由于只是给出一个内存地址,不知道希望赋予ax的,是byte还是word,所以需要用word明确指出!所以,当两个操作数的宽度不一样时,就要用到ptr。
(可以理解为,ptr是临时的类型转换,相当于C语言中的强制类型转换)也就是说*p 用汇编表示就是:dword ptr [p]*p是取p所指内存地址处的值。
(1)通过寄存器名指明要处理的数据的尺寸。
(既有寄存器,可以不用ptr来限制了,系统会自动分析的)例如:下面的指令中,寄存器指明了指令进行的是字操作:mov ax,1mov bx,ds:[0] 这个的意思是段内的偏移地址是0,段地址是DS。
详情请看本人其他日记mov ds,axmov ds:[0],axinc axadd ax,1000下面的指令中,寄存器指明了指令进行的是字节操作(因为是al):mov al,1mov al,blmov al,ds:[0]mov ds:[0],alinc aladd al,100(2)在没有寄存器名存在的情况下,既都是在内存,得用操作符 X ptr 指明内存单元的长度,X在汇编指令中可以为byte,word或者DWORD。
要不然内存是片连续的区域,操作就乱了。
例如:下面的指令中,用word ptr 指明了指令访问的内存单元是一个字单元:mov word ptr ds:[0],1inc word ptr [bx]inc word ptr ds:[0]add word ptr [bx],2下面的指令中,用byte ptr 指明了指令访问的内存单元是一个字节单元:mov byte ptr ds:[0],1inc byte ptr [bx]inc byte ptr ds:[0]add byte ptr [bx],2在没有寄存器参与的内存单元访问指令中,用word prt 或byte ptr 显性地指明所要访问的内存单元的长度是很必要的。
32位汇编语言程序设计部分课后习题答案资料
11
习题解答
第2章习题:数据表示和寻址
2.1 简答题(2、3、4、7、8) 2.2 判断题(2、4、8、9、10)
2.3 填空题(1、2、3、8、9)
2.10、2.14、2.15、2.17
2.1 简答题-1
(2)字符“'F'”和数值46H作为MOV指令的源操作数 有区别吗? • 没有,因为字符“'F'”的ASCII码就是数值46H (3)为什么可以把指令“MOV EAX, (34+67H)*3”中 的数值表达式看成是常量? • 汇编程序在汇编过程中对数值表达式计算,得到一 个确定的数值,故称数值表达式为常量 (4)汇编语言为什么规定十六进制数若以A~F开头, 需要在前面加个0? • 以便与标识符区别,因为标识符要求以字母(或特 殊符号)开头
7
习题解答
习题1.9
• IA-32处理器有哪三类基本段,各是什么用途? • 解答: • 代码段:存放程序的指令代码 • 数据段:存放当前运行程序所用的数据 • 堆栈段:主存中堆栈所在的区域
8
习题解答
习题1.13
• 汇编语言语句有哪两种,每种语句由哪4个部分组成 • 解答: • 汇编语句有两种
执行性语句(处理器指令) 说明性语句(伪指令) • 每个语句有4部分组成 标号 指令助记符 操作数或参数 注释
14
习题解答
2.2 判断题-1
(2)常用的BCD码为8421 BCD码,其中的8表示D3位的 权重。 •对 (4)用“BYTE”和“DWORD”定义变量,如果初值相 同,则占用的存储空间也一样多。 • 错。用BYTE只占一个存储单元,而DWORD要占4个存 储单元 (8)立即数寻址只会出现在源操作数中。 •对
汇编语言程序设计练习题及参考答案
一、单项选择题从每小题的四个备选答案中,选出一个正确答案,并将正确答案的番号填人括号内。
1.用来存放下一条将要执行的指令地址的寄存器是(B)A.SP B.IP C.BP D.CS2.要使串处理从低地址向高地址进行,应把标志位置为(D)A.IF=1B.TF=0C.DF=1D.DF=03.使状态标志位CF清零的错误指令是(C)A.OR AX,AX B.SUB AX,AXC.MOV CF,0D.CLC4.设SP=1110H,执行PUSH AX指令后,SP的内容为(B)A.SP=1112H B.SP=110EHC.SP=1111H D.SP=110FH5.汇编源程序出现语法错误的指令有(D)A.MOV[BX+SI],AL B.MOV AX,[BP+DI]C.MOV DS,AX D.MOV CS,AX6.下列串操作指令中,必须同时指明源串和目的串地址的指令是(D)A.STOSW B.LODSWC.SCASW D.CMPSW7.设BL中有一无符号数,实现把BL中的数乘以2,应选用的指令是(B)A.SHR BL,1B.SHL BL,1C.SAR BL,1D.RCR BL,18.执行PUSH AX指令的正确步骤是(A)A.1.SP←SP-1,(SP)←AH B.1.(SP)←AH,SP←SP-12.SP←SP-1,(SP)←AL2.(SP)←AL,SP←SP-1C.1.SP←SP+1,(SP)←AH D.1.(SP)←AH,SP←SP+12.SP←SP+1,(SP)←AL2.(SP)←AL,SP←SP+19.CF=1时转移到目标地址的条件转移指令是(B)A.JNC B.JC C.JZ D.JS10.在执行NEG指令时,对标志位CF有影响,其影响的规则是(C)A.对正数求补时,CF=0B.对负数求补时,CF=0C.对非零数求补时,CF=1D.对零求补时,CF=111.算术右移SAR和逻辑右移SHR两条指令执行后结果完全相同的情况是(A)A.目的操作数最高位为0B.目的操作数最高位为1C.目的操作数为任意情况D.无论什么情况都不可能相同12.设AL=04H,BL=0F8H,执行IMUL BL指令后,结果是(D)A.AX=0032H B.AX=00E0HC.AX=03E0H D.AX=0FFE0H13.指令的操作数中,允许出现表达式,例如BUF1与BUF2均为变量名,下面指令中语法正确的是(D)A.MOV AX,BUFl*BUF2B.MOV AX,BUF1/BUF2C.MOV AX,BUF1+ES:BUF2D.MOV AX,BUF2-BUF114.下面指令中,操作数的寻址方式为寄存器间接寻址的指令是(C )A.INC WORD PTR [BX+SI]B.INC CX,[SI+COUNT]C.NEG BYTE PTR [BX]D.ADD AX,B15.NUM EQU 80HDA DB 34HAND DA,NUM上述语句执行后,DA 中的内容是(D )A.0B4H B.80H C.34H D.016.直接、间接、立即三种寻址方式指令的执行速度,由快至慢的排序为(A )A.立即、直接、间接B.直接、间接、立即C.直接、立即、间接D.不一定17.语句DA1DB 2DUP(3,5,7)汇编后,该语句可等同于的语句是(D )A.DA1DB 3,5,7B.DA1DB 2,3,5,7C.DA1DB 3,5,7,2D.DA1DB 3,5,7,3,5,718.MOV AL,80HMOV CL,2SAR AL,CL上述指令序列执行后,结果是(D )A.AL=40H B.AL=20HC.AL=0C0H D.AL=0E0H19.下面是实现将AL 内容加1的压缩型BCD 码加法程序段,其中正确的指令序列是(A )A.INC AL B.ADD AL,1DAA DASC.ADD AL,1D.STCDAA AAA20.现有数据存储如图所示:30100H 30101H 30102H 30103H 设AL=01H,BX=0100H,DS=3000H 执行换码指令XLAT 后正确的结果是(B )A.AL=20H B.AL=38HC.AL=00H D.AL=41H21.若定义DAT DW 'A',则(DAT)和(DAT+1)两个相邻的内存中存放的数据是(B )A.0041H B.4100H 20H38H41H55HC.xx41H D.41xxH[注]选项C.和D.中的XX表示任意数据。
汇编语言重点知识总结
汇编语言重点知识总结汇编速查手册汇编语言总结概要寄存器与存储器1. 寄存器功能. 寄存器的一般用途和专用用途. CS:IP 控制程序执行流程. SS:SP 提供堆栈栈顶单元地址. DS:BX(SI,DI) 提供数据段内单元地址. SS:BP 提供堆栈内单元地址. ES:BX(SI,DI) 提供附加段内单元地址. AX,CX,BX 和CX 寄存器多用于运算和暂存中间计算结果,但又专用于某些指令( 查阅指令表)。
. PSW 程序状态字寄存器只能通过专用指令( LAHF, SAHF) 和堆栈(PUSHF,POPF) 进行存取。
2. 存储器分段管理. 解决了16 位寄存器构成20 位地址的问题. 便于程序重定位. 20 位物理地址= 段地址* 16 + 偏移地址. 程序分段组织: 一般由代码段, 堆栈段,数据段和附加段组成, 不设置堆栈段时则使用系统内部的堆栈。
3. 堆栈. 堆栈是一种先进后出的数据结构, 数据的存取在栈顶进行, 数据入栈使堆栈向地址减小的方向扩展。
. 堆栈常用于保存子程序调用和中断响应时的断点以及暂存数据或中间计算结果。
. 堆栈总是以字为单位存取指令系统与寻址方式1. 指令系统. 计算机提供给用户使用的机器指令集称为指令系统, 大多数指令为双操作数指令。
执行指令后,一般源操作数不变,目的操作数被计算结果替代。
. 机器指令由CPU 执行,完成某种运算或操作,8086/8088 指令系统中的指令分为6 类: 数据传送,算术运算,逻辑运算,串操作,控制转移和处理机控制。
2. 寻址方式. 寻址方式确定执行指令时获得操作数地址的方法. 分为与数据有关的寻址方式(7 种) 和与转移地址有关的寻址方式(4)种。
. 与数据有关的寻址方式的一般用途:(1) 立即数寻址方式--将常量赋给寄存器或存储单元(2) 直接寻址方式-- 存取单个变量(3) 寄存器寻址方式--访问寄存器的速度快于访问存储单元的速度(4) 寄存器间接寻址方式--访问数组元素(5) 变址寻址方式(6) 基址变址寻址方式(7) 相对基址变址寻址方式(5),(6),(7) 都便于处理数组元素. 与数据有关的寻址方式中,提供地址的寄存器只能是BX,SI,DI 或BP . 与转移地址有关的寻址方式的一般用途:(1) 段内直接寻址-- 段内直接转移或子程序调用(2) 段内间接寻址-- 段内间接转移或子程序调用(3) 段间直接寻址-- 段间直接转移或子程序调用(4) 段间间接寻址-- 段间间接转移或子程序调用汇编程序和汇编语言1. 汇编程序. 汇编程序是将汇编语言源程序翻译成二进制代码程序的语言处理程序, 翻译的过程称为汇编。
微机原理与汇编语言作业参考答案
《微机原理与汇编语言》作业一答案一、填空题1、计算机中的CPU由运算器和控制器组成。
2、根据传送的内容不同,微型计算机系统总线可以分为数据总线、地址总线和控制总线。
3、(513.85)10 = ( 201.D999 )16 (105.3)8 = ( 69.375 )10(9E.A)16 = ( 236.5 )8(1001.11001 )2 = ( 9.78125 )104、“9”的ASCII码是39H ,“DEL”的ASCII码是7FH ,“K”的ASCII码是4BH 。
5、假定机器的字长为8位,且最高位为符号位,则(-127)10的原码用8位二进数表示为11111111 ,其补码用8位二进数可表示为10000001 。
6、[4C10H]补= [ 4C10H ]原[9DH]补= [ -63H ]原7、I/O端口有两种编址方式,分别是统一编址和独立编址。
8、有一个由20个字组成的数据区,其起始地址为610AH:1CE7H,则数据区首地址为62D87H ,数据区末地址为62DAEH 。
9、8086寻址I/O端口时,使用16 条地址总线,可以寻址32K 个字端口或64K 个字节端口。
二、名词解释1、字节、字、字长字节:是计算机中通用的的基本单元,它由8个二进制位组成,即8位二进制数组成一个字节。
字:是计算机内部进行数据处理的基本单位。
对于16位微型计算机而言,字由两个字节组成,每个字节长度为8位,分别称为高位字节和低位字节。
对于32位的微型计算机,它由4个字节组成,组合后为双字。
字长:是计算机在交换、加工和存放信息时,其信息位的最基本长度,决定了系统一次传送的二进制数的位数。
各种类型的微型计算机字长是不相同的,字长越长的计算机,处理数据的精度和速度就越高。
因此,字长是微型计算机中最重要的指标之一。
2、主频、基本指令执行时间主频:也称为时钟频率,通常是指计算中时钟脉冲发生器所产生的时钟信号的频率,单位为MHz(兆赫),它决定了微型计算机的处理速度。
钱晓捷汇编语言程序设计课后习题(作业新)
钱晓捷汇编语⾔程序设计课后习题(作业新)习题1 (1)习题2 (4)习题3 (10)习题4 (13)习题5 (15)习题6 (18)习题7 (21)习题8 (24)习题9 (27)1.1 简述计算机系统的硬件组成及各部分作⽤。
1.2 明确下列概念或符号:主存和辅存,RAM和ROM,存储器地址和I/O端⼝,KB,MB,GB和TB。
1.3 什么是汇编语⾔源程序、汇编程序、⽬标程序?1.4 汇编语⾔与⾼级语⾔相⽐有什么优缺点?1.5 将下列⼗六进制转化为⼆进制和⼗进制表⽰。
(1)FFH (2)0H (3)5EH (4)EFH(5)2EH (6)10H (7)1FH (8)ABH1.6 将下列⼗进制数转换为BCD码表⽰。
(1)12 (2)24 (3)68 (4)127(5)128 (6)255 (7)1234 (8)2458解答:⼗进制数 BCD码120001001024001001006801101000127000100100111128000*********255001001010101123400010010001101002458 00100100010110001.7 将下列BCD码转换为⼗进制数。
(1)10010001 (2)10001001 (3)00110110 (4)10010000(5)00001000 (6)10010111 (7)10000001 (8)00000010解答:10010001 9110001001 8900110110 3610010000 9000001000 0810010111 9710000001 8100000010 021.8 将下列⼗进制数分别⽤⼋位⼆进制数的原码、反码和补码表⽰。
(1)0 (2)-127 (3)127 (4)-57 (5)126 (6)-126 (7)-128(8)681.9 完成下列⼆进制数的计算。
(1)1011+1001 (2)1011-1001 (3)1011×1001 (4)10111000/1001(5)1011∧1001 (6)1011∨1001 (7)~1011 (8)1011⊕10011.10 数码0~9,⼤写字母A~Z,⼩写字母a~z,对应的ASCII码分别是多少?ASCII码为0dH,0aH对应的是什么字符?解答:⼤写字母A~Z,对应的ASCII码分别是41H~5AH⼩写字母a~z,对应的ASCII码分别是61H~7AHASCII码为0dH,0aH分别对应“回车”、“换⾏”1.11 计算机中有⼀个“01100001”编码,如果把它认为是⽆符号数,它是⼗进制什么数?如果你认为它是BCD码,则表⽰什么数?如果它是某个ASCII码,则代表哪个字符?1.12 简述Intel80x86系列微处理器在指令集⽅⾯的发展。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
汇编语言中PTR的含义及作用
ptr -- pointer (指针)缩写。
汇编里面 ptr 是规定的字 (保留字)。
mov ax,bx ;是把BX寄存器“里”的值赋予AX,由于二者都是word型,不用word
mov ax,word ptr [bx];是把内存地址等于“BX寄存器的值”的地方所存放的数据,赋予ax。
由于只是给出一个内存地址,不知道希望赋予ax的,是byte 还是word,所以需要用word明确指出!
所以,当两个操作数的宽度不一样时,就要用到ptr。
(可以理解为,ptr是临时的类型转换,相当于C语言中的强制类型转换)也就是说
*p 用汇编表示就是:dword ptr [p]
*p是取p所指内存地址处的值。
(1)通过寄存器名指明要处理的数据的尺寸。
(既有寄存器,可以不用ptr 来限制了,系统会自动分析的)
例如:
下面的指令中,寄存器指明了指令进行的是字操作:
mov ax,1
mov bx,ds:[0] 这个的意思是段内的偏移地址是0,段地址是DS。
详情请看本人其他日记
mov ds,ax
mov ds:[0],ax
inc ax
add ax,1000
下面的指令中,寄存器指明了指令进行的是字节操作(因为是al):
mov al,1
mov al,bl
mov al,ds:[0]
mov ds:[0],al
inc al
add al,100
(2)在没有寄存器名存在的情况下,既都是在内存,得用操作符 X ptr 指明内存单元的长度,X在汇编指令中可以为byte,word或者DWORD。
要不然内存是片连续的区域,操作就乱了。
例如:
下面的指令中,用word ptr 指明了指令访问的内存单元是一个字单元:
mov word ptr ds:[0],1
inc word ptr [bx]
inc word ptr ds:[0]
add word ptr [bx],2
下面的指令中,用byte ptr 指明了指令访问的内存单元是一个字节单元:mov byte ptr ds:[0],1
inc byte ptr [bx]
inc byte ptr ds:[0]
add byte ptr [bx],2
在没有寄存器参与的内存单元访问指令中,用word prt 或byte ptr 显性地指明所要访问的内存单元的长度是很必要的。
否则,CPU无法得知所要访问的单元,还是字节单元。
假如我们用Debug查看内存的结果如下:2000:1000 FF FF FF FF FF FF ......
那么指令:
mov ax,2000H
mov ds,ax
mov byte ptr [1000H],1
将使内存中的内容变为:
2000: 1000 01 FF FF FF FF FF ......
而指令:
mov ax,2000H
mov ds,ax
mov word ptr [1000H],1
将使内存中的内容变为:
2000:1000 01 00 FF FF FF FF ......
这是因为 mov byte ptr [1000H],1访问的是地址为 ds:1000H 的字节单元,修改的是ds:1000H 单元的内容;而mov word ptr [1000H],1 访问的是地址为 ds:1000H 的字单元,修改的是 ds:1000H 和 ds:1001H 两个单元的内容。
(3)其他方法
有些指令默认了访问的是字单元还是字节单元,比如:push [1000H] 就不用指明访问的是字单元还是字节单元,因为push指令只进行字操作。
补充:
ptr也可以是是临时的类型转换,
cmp word ptr[si],'#'
是用si所指向的内存的连续两个字节与#比较
要是改成
cmp byte ptr[si],'#'
那就是用si指向的那个存储单元的内容(一个字节)与#比较了
jmp near ptr opd
是无条件转移指令,转移到段内的标号opd所标识的位置(临时说明成近类型)
若是
jmp far ptr opd
那就是转移到另外一个代码段的opd所标识的位置了(远类型)
总结:
不管用在什么位置,ptr的作用就是临时指定类型
可以放在ptr前面的类型有byte(字节)、word(字)、dword(双字)、qword(四字)、tbyte(十字节)、far(远类型)和near(近类型)。