汇编语言中ptr含义与作用
- 格式:pdf
- 大小:536.18 KB
- 文档页数:3
ARM 中常⽤的汇编指令1 处理器内部数据传输指令MSR & MRS⽤于在状态寄存器和通⽤寄存器之间传送数据MRS: 状态寄存器到通⽤寄存器的传送指令。
({R0-R12} <== CPSR,SPSR)MSR: 通⽤寄存器到状态寄存器的传送指令。
MRS:(CPSR,SPSR==>{R0-R12})MOVMOV 指令⽤于将数据从⼀个寄存器拷贝到另外⼀个寄存器,或者将⼀个⽴即数传递到寄存器⾥⾯,使⽤⽰例如下:2 存储器访问指令ARM 不能直接访问存储器,⽐如 RAM 中的数据,⼀般先将要配置的值写⼊到 Rx(x=0~12)寄存器中,然后借助存储器访问指令将 Rx 中的数据写⼊到寄存器中。
指令描述LDR Rd, [Rn , #offset]从存储器 Rn+offset 的位置读取数据存放到 Rd 中STR Rd, [Rn, #offset]将 Rd 中的数据写⼊到存储器中的 Rn+offset 位置LDR 指令LDR 主要⽤于从存储加载数据到寄存器 Rx 中, LDR 也可以将⼀个⽴即数加载到寄存器 Rx中, LDR 加载⽴即数的时候要使⽤“=”,⽽不是“#”。
在嵌⼊式开发中, LDR 最常⽤的就是读取 CPU 的寄存器值。
上述代码就是读取寄存器中的值,读取到的寄存器值保存在 R1 寄存器中,上⾯代码中 offset 是 0,也就是没有⽤到 offset。
STR 指令LDR 是从存储器读取数据, STR 就是将数据写⼊到存储器中LDR 和 STR 都是按照字进⾏读取和写⼊的,也就是操作的 32 位数据,如果要按照字节、半字进⾏操作的话可以在指令“LDR”后⾯加上B 或 H,⽐如按字节操作的指令就是 LDRB 和STRB,按半字操作的指令就是 LDRH 和 STRH。
MRS R0, CPSR @ 将特殊寄存器 CPSR ⾥⾯的数据传递给 R0,即R0=CPSR1MSR CPSR , R0 @ 将 R0 中的数据复制到 CPSR 中,即 CPSR =R01MOV R0, R1 @ 将寄存器 R1 中的数据传递给 R0,即 R0=R1MOV R0, #0X12 @ 将⽴即数 0X12 传递给 R0 寄存器,即 R0=0X1212LDR R0, =0X0209C004 @ 将寄存器地址 0X0209C004 加载到 R0 中,即 R0=0X0209C004LDR R1, [R0] @ 读取地址 0X0209C004 中的数据到 R1 寄存器中12LDR R0, =0X0209C004 @ 将寄存器地址 0X0209C004 加载到 R0 中,即 R0=0X0209C004LDR R1, =0X20000002 @ R1 保存要写⼊到寄存器的值,即R1=0X20000002STR R1, [R0] @ 将 R1 中的值写⼊到 R0 中所保存的地址中1233 压栈和出栈指令我们通常会在 A 函数中调⽤ B 函数,当 B 函数执⾏完以后再回到 A 函数继续执⾏。
汇编语言中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. 指针寄存器的值必须正确设置,确保指向有效的内存区域,否则会导致程序运行错误或崩溃。
《微机原理及应用》模拟试卷一参考答案一、选择题1.B C B C A 6. D A C D B二、填空题1.无条件查询中断DMA2.缓冲器锁存器3.数据总线地址总线控制总线4.2 中断向量号(中断类型码)5.OUT6.12H 5030:38007.352348.36H 3AH9.EOC10.CAH CCH三、判断题1.××√√√ 6. √××√×四、简答题1.微型计算机硬件系统由哪几部分组成?各部分功能是什么?答:微型计算机的硬件系统主要由处理器子系统、存储器、I/O接口及I/O设备、系统总线等几部分组成;处理器子系统控制和协调微机系统的各个部件;存储器用来存放程序和数据;I/O设备为微机提供具体的输入/输出手段,I/O接口充当外设与CPU间的桥梁;系统总线用来传递信息。
2.8086基本总线周期是如何组成的?各状态中完成什么基本操作?答:基本总线周期由4个时钟(CLK)周期组成,按时间顺序定义为T1、T2、T3、T4。
在T1期间8086发出访问目的地的地址信号和地址锁存选通信号ALE;T2期间发出读写命令信号RD*、WR*及其它相关信号;T3期间完成数据的访问;T4结束该总线周期。
3.8259的内部寄存器中IRR、IMR、ISR三个寄存器的作用是什么?中断结束实质上是对哪个寄存器进行操作?答:中断请求寄存器IRR:保存8条外界中断请求信号IR0~IR7的请求状态,Di位为1表示IRi引脚有中断请求,为0表示无请求。
中断服务寄存器ISR:保存正在被8259A服务着的中断状态,Di位为1表示IRi中断正在服务中,为0表示没有被服务。
中断屏蔽寄存器IMR:保存对中断请求信号IR的屏蔽状态,Di位为1表示IRi中断被屏蔽(禁止),为0表示允许。
中断结束实质上是使ISR中IRi所对应的Di位清零。
4、在8088系统最小组态中,读取指令“SUB [4000H] ,AX”(指令长度为3B)和执行该指令各需要几个总线周期?它们各是什么样的总线周期?答:由于SUB [4000H],AX 指令放在存储器中,长为3字节,所以读取指令需要3个存储器读总线周期;执行指令时,取操作数需要2个存储器读周期,存结果需要2个存储器写周期。
汇编语言中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 显性地指明所要访问的内存单元的长度是很必要的。
shared_ptr作为函数参数的特定函数1. 定义shared_ptr是C++11标准库中的一个智能指针,用于管理动态分配的内存资源。
它提供了自动的内存管理,能够自动释放资源,避免了手动管理内存的麻烦和容易引发的内存泄漏问题。
shared_ptr采用引用计数的方式来管理内存资源。
每个shared_ptr对象都包含一个指向动态分配内存的指针,以及一个引用计数器。
当一个shared_ptr对象被创建时,引用计数器初始化为1。
每当该对象被拷贝构造或拷贝赋值给另一个shared_ptr对象时,引用计数器加1。
当一个shared_ptr对象被析构时,引用计数器减1。
当引用计数器为0时,表示没有任何对象引用该内存资源,此时shared_ptr会自动释放该内存资源。
2. 用途shared_ptr作为函数参数的特定函数是指将shared_ptr对象作为函数参数传递的函数。
它的主要用途是在函数中对动态分配的内存资源进行操作,并确保资源的正确释放。
使用shared_ptr作为函数参数的特定函数有以下几个常见的用途:2.1 传递动态分配的内存资源当我们需要在函数中对动态分配的内存资源进行操作时,我们可以将shared_ptr 作为函数参数传递给函数。
这样可以确保在函数执行完毕后,动态分配的内存资源会被正确释放,避免了内存泄漏的问题。
2.2 传递资源的所有权shared_ptr可以在多个地方共享同一块内存资源,通过传递shared_ptr对象,可以将资源的所有权从一个地方转移到另一个地方。
这样可以避免资源被重复释放或者忘记释放的问题。
2.3 传递资源的状态shared_ptr对象不仅包含指向动态分配内存的指针,还包含了一个引用计数器。
通过传递shared_ptr对象,可以传递资源的状态信息,比如引用计数器的值,从而可以在函数中判断资源是否被其他地方引用。
2.4 传递资源的共享权限shared_ptr对象可以通过控制块(control block)来共享对同一块内存资源的访问权限。
北京语言大学网络教育学院《汇编语言》模拟试卷一注意:1.试卷保密,考生不得将试卷带出考场或撕页,否则成绩作废。
请监考老师负责监督。
2.请各位考生注意考试纪律,考试作弊全部成绩以零分计算。
3.本试卷满分100分,答题时间为90分钟。
4.本试卷分为试题卷和答题卷,所有答案必须答在答题卷上,答在试题卷上不给分。
一、单项选择题(本大题共20小题,每小题2分,共40分)在每小题列出的四个选项中只有一个选项是符合题目要求的,请将正确选项前的字母填在答题卷相应题号处。
1.在微机汉字系统中,一个汉字的机内码占()字节。
[A] 1 [B] 2 [C] 3 [D] 42.十进制33.25转换成十六进制数为()。
[A] B1.4H [B] 1B.19H [C] 21.4H [D] 33.4H3.下列指令中操作数在代码段中的是()。
[A] MOV AX,25H [B] INC DS:[25H] [C] CMP AL,BL [D] ADD AH,BL 4.表示源程序结束的伪操作的格式是()。
[A] ENDS[LABEL] [B] END[LABEL][C] ENDS [D] END5.下列指令正确的是()。
[A] MOV CX, AL [B] MOV DS, 200h[C] MOV DS, CS [D] MOV DS, AX6.JMP FAR PTR XXXX(XXXX是符号地址)是()。
[A] 寄存器寻址[B] 寄存器间接寻址[C] 段间直接转移寻址[D] 段内间接转移寻址7.对数值7DA3H做“非”运算的结果为()。
[A] 824CH [B] 825BH [C] 825CH [D] 825DH8.下列寄存器组中在段内寻址时可以提供偏移地址的寄存器组是()。
[A] AX,BX,CX,DX [B] BX,BP,SI,DI[C] SP,IP,BP,DX [D] CS,DS,ES,SS9.执行除法指令后,影响的标志位是()。
汇编中BPSP有何区别分别怎么使用在汇编语言中,BP(Base Pointer)和SP(Stack Pointer)是两个非常重要的寄存器。
它们分别用于提供程序的基址和栈顶地址,并且在程序执行过程中起到了关键的作用。
1. BP(Base Pointer):BP寄存器作为基址寄存器,主要用于引用数据段中的变量。
它常用于进程的运行时堆栈和局部变量的访问。
BP寄存器通常在函数调用和返回时使用,帮助程序跟踪保存在堆栈中的局部变量和函数参数。
BP寄存器可以通过以下指令来设置和访问:-MOV指令:将一个值复制到BP寄存器。
-PUSH指令:将BP寄存器中的值推入堆栈。
-POP指令:将堆栈中的值弹出并存储到BP寄存器。
使用BP寄存器的典型场景是在函数调用过程中保存旧的BP值,然后将堆栈指针移动到栈顶。
这样可以为局部变量分配空间,并通过BP寄存器引用这些变量。
例如,以下是一个使用BP寄存器的示例代码片段:```assemblymain:MOVBP,SP;保存当前BP值SUBSP,4;为局部变量分配空间...;其他指令...MOVSP,BP;恢复堆栈指针POPBP;恢复旧的BP值RET;返回```2. SP(Stack Pointer):SP寄存器用于跟踪堆栈的栈顶地址。
堆栈是一种后进先出(LIFO)数据结构,用于存储临时数据、函数调用信息和局部变量。
SP寄存器可以通过以下指令来设置和访问:-MOV指令:将一个值复制到SP寄存器。
-PUSH指令:将一个值推入堆栈并递减SP寄存器的值。
-POP指令:将堆栈中的值弹出并递增SP寄存器的值。
使用SP寄存器的典型场景是在函数调用过程中为函数参数和临时变量分配空间,并在函数返回时恢复堆栈指针。
以下是一个使用SP寄存器的示例代码片段:```assemblymain:SUBSP,4;为局部变量分配空间PUSH10;将10推入堆栈...;其他指令...ADDSP,4;恢复堆栈指针RET;返回```总结起来,BP用于引用数据段中的变量,主要用于函数调用和返回过程中的局部变量的访问;SP用于跟踪堆栈的栈顶地址,主要用于为函数参数和临时变量分配空间。
`00第一章课外练习题一、单项选择题:1.从键盘输入的字符,在计算机内存储的是它的(A)(A)二进制编码(B)四进制编码(C)八进制编码(D)十六进制编码2.6位无符号二进制数能表示的最大十进制数是(B)。
(A)64 (B)63 (C)32 (D)31 3.十进制数269变换为十六进制数是(C)。
(A)10B (B)10C (C)10D (D)10E 4.8位的微型计算机系统是以16位来表示地址,则该微机系统有(C)个地址空间。
(A)255 (B)65535 (C)65536 (D)1048576 5.8位有符号二进制数能表示的最大十进制数是(D)。
(A)256 (B)255 (C)128 (D)127 6.十六进制数88H,可表示成下面几种形式,请找出错误的表示(D)。
(A)无符号十进制数136 (B)带符号十进制数-120(C)压缩型BCD十进制数88 (D)8位二进制数-8的补码表示7.有一个数值152,它与十六进制数6A相等,那么该数值是(B)。
(A)二进制数(B)八进制数(C)十进制数(D)四进制数8.7位ASCII总共可表示(C)个符号。
(A)256 (B)127 (C)128 (D)255 9.4B的字长是(C)。
(A)8位(B)16位(C)32位(D)64位二、判断题(判断每题正误,对的在题后括号内划“√”,错的划“×”)1.字节通常用英文单词“Bit”来表示(×)。
2.目前广泛使用的Pentium计算机其字长为5个字节(×)。
3.存储器中将8个相邻的二进制位作为一个单位,这种单位称为字节(√)。
4.微型计算机的字长并不一定是字节的整数倍(×)。
三、填空题1.8位有/无符号整数的表示范围写成16进制形式为(80~~7F)/(00~~FF)。
2.己知:计算机中有一个“01100001”编码,如果把它看作是无符号数,它是十进制什么数(97);如果认为它是BCD,则表示(01100001)BCD;认为它是某个ASCII,则代表(a)字符。
汇编指令大全(DST:destination目的操作数/地址;SRC:source源操作数/地址;port:端口;ac:Accumulator累加器;reg:register寄存器;cnt:counter计数器;opr:除了立即数之外的所有寻址方式(寄存器);立即数:直接包含在代码中,作为代码的一部分,不需要保存在寄存器中的操作数,相当于高级语言中的常量;r8/r16:8位通用寄存器/16位通用寄存器;SR:segment register段寄存器,包括DS、SS、ES、CS;mem:memory,表示存储器操作数;addr:address,表示内存单元地址;) [数据传送指令]一、通用数据传送指令1、传送指令 MOV (move)指令的汇编格式:MOV DST,SRC指令的基本功能:(DST)←(SRC) 将原操作数(字节或字)传送到目的地址。
指令支持的寻址方式:目的操作数和源操作数不能同时用存储器寻址方式,这个限制适用于所有指令。
指令的执行对标志位的影响:不影响标志位。
指令的特殊要求:目的操作数DST和源操作数SRC不允许同时为段寄存器;目的操作数DST不能是CS,也不能用立即数方式。
2、进栈指令 PUSH (push onto the stack)出栈指令 POP (pop from the stack)指令的汇编格式:PUSH SRC ;POP DST指令的基本功能:PUSH指令在程序中常用来暂存某些数据,而POP指令又可将这些数据恢复。
PUSH SRC (SP)←(SP)-2 ;(SP)←(SRC)POP DST (DST)←((SP));(SP)←(SP)指令支持的寻址方式:push 和 pop指令不能不能使用立即数寻址方式。
指令对标志位的影响:PUSH 和 POP指令都不影响标志位。
指令的特殊要求:PUSH 和 POP指令只能是字操作,因此,存取字数据后,SP的修改必须是+2 或者 -2;POP指令的DST不允许是CS寄存器;3、交换指令 XCHG (exchange)指令的汇编格式:XCHG OPR1,OPR2指令的基本功能:(OPR1)←>(OPR2)指令支持的寻址方式:一个操作数必须在寄存器中,另一个操作数可以在寄存器或存储器中。
新版汇编语言程序设计习题答案(钱晓捷主编)第一章汇编语言基础知识1.1、简述计算机系统的硬件组成及各部分作用1.2、明确下列概念或符号:主存和辅存,RAM和ROM,存储器地址和I/O端口,KB、MB、GB和TB1.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)24581.7、将下列BCD码转换为十进制数(1)10010001 (2)10001001 (3)00110110 (4)10010000(5)00001000 (6)10010111 (7)10000001 (8)000000101.8、将下列十进制数分别用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 ∧~1011 (8)1011 ⊕1001 1001(6)1011 ∨1001(7)1.10 数码0~9、大写字母A~Z、小写字母a~z对应的ASCII码分别是多少?ASCII码为0dh、0ah对应的是什么字符?1.11、计算机中有一个“01100001”编码,如果把它认为是无符号数,它是10进制什么数?如果认为它是BCD码,则表示什么数?又如果它是某个ASCII码,则代表哪个字符?1.12、简述Intel 80x86系列微处理器在指令集方面的发展。
一、单项选择题从每小题的四个备选答案中,选出一个正确答案,并将正确答案的番号填人括号内。
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表示任意数据。
汇编(十五)——控制转移类指令一Intel 8086中,程序的执行序列是由代码段寄存器CS 和指令指针IP确定的。
CS包含当前指令所在代码段的段地址,IP则是要执行的下一条指令的偏移地址。
程序的执行一般是依指令序列顺序执行,但有时候需要改变程序的流程,实现分支程序。
控制转移类指令通过修改CS和IP的值改变程序的执行顺序,实现分支。
分支程序有时根据某个条件转移执行,有时无条件条转到某条指令执行,转移指令的目标地址是代码段中某个指令的位移量,这个位移量是用标号来指出的。
一、标号标号(过程名亦视为标号)用来说明可执行指令在汇编语言程序中的位置(从这个角度来说,变量应用于说明伪指令的位置)。
标号可以作为转移指令(或调用指令CALL)的操作数。
和变量类似,标号有三种属性:段(SEGMENT)、位移量(OFFSET)和距离(DISTANCE)。
段和位移量属性就是在哪个段、什么位置上定义的标号。
标号只要有了定义,这两个属性就自然的产生。
如果标号只能在本段中(即标号所定义的段中)用JMP或条件转移指令(或CALL)进行访问,那么必须将这个标号的距离属性定义为NEAR;如果标号能为其他段中的JNMP(或CALL)指令访问,则需将标号的距离属性定义为FAR。
标号的距离属性需要再定义标号时指出。
1、标号的定义(1)定义距离属性为NEAR的标号1)距离属性为NEAR的标号可以用隐含的说明,即在标号名后面加上冒号,放在指令前面。
如:L1: MOV AX,BX@: ADD AX,1002)距离属性为NEAR的标号也可以用现实说明,即用LABEL 位指令明显说明,或在EQU位指令中用THIS操作符明显的指出。
如:L2 LABEL NEARMOV CX,5L3 EQU THIS NEARAND AX,0FFH(2)定义距离属性为FAR的标号距离属性为FAR的标号只能显示说明L4 LABEL FARMOV AX,DXL5 EQU THIS FAROR AL,30H(3)同一条指令处可以定义两个距离属性不同的标号,以提高访问标号的灵活性。
汇编语言补充复习题(含答案)汇编语言补充复习题一、简答题1、8086的指令格式由哪些部分组成?什么是操作码?什么是操作数?什么是寻址方式?2、8086/8088中有关操作数的寻址方式有哪几种?3、汇编语言程序应该由哪些逻辑段组成?各段的作用是什么?4、写出以下结构类定义语句的格式。
过程定义:段定义:5、简述标志寄存器各位的定义。
6、写出具有下列功能的伪指令语句:在DAl为首地址的存储单元中连续存放字节数据:2个54,5个‘A’, 10个(3,5)。
7、解释段基地址、逻辑地址、偏移地址、有效地址、物理地址的含义。
物理地址如何计算?(P35)教材P57,1~6教材P112,7~14教材P140,6~9,11教材P198,9(1)~(5)二、选择题1、若(AX)=0122H,4个标志位CF,SF,ZF,OF的初始状态为0,执行指令SUB AX,0FFFH 后,这4个标志位的状态是A、(CF)=0,(SF)=0,(ZF)=0,(OF)=0B、(CF)=0,(SF)=0,(ZF)=1,(OF)=1C、(CF)=1,(SF)=1,(ZF)=0,(OF)=0D、(CF)=1,(SF)=1,(ZF)=1,(OF)=12、当运算结果为0时,不能转向标号L1处的指令为A、JE L1B、JGE L1C、JNZ L1D、JAE L13、当程序结束要退回DOS时,在系统功能调用中,INT 21H指令前,先必须执行的指令是()。
AMOV AH,01H B、MOV AH,4CHC、MOV AH,02HD、MOV AH,09H4、DOS功能调用的子功能号应存放在()寄存器中A、AHB、ALC、DHD、DL5、比较两个同长度的字符串,全相等则转移到ST2的是()。
A、REPE CMPSBB、REPNE CMPSBJZ ST2 JZ ST2C、REP MOVSBD、REPNE MOVSBJZ ST2 JZ ST26、设ALPHA DW 7435H,396,8321,AUl DB 10 DUP(?)BETA DD 9543HCNT EQU BETA-ALPHA,则CNT的值为()。
汇编语言中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显性地指明所要访问的内存单元的长度是很必要的。
反向解析与PTR(PointerRecord)PTR记录,是电⼦邮件系统中的邮件交换记录的⼀种;另⼀种邮件交换记录是A记录(在IPv4协议中)或AAAA记录(在IPv6协议中)。
PTR记录常被⽤于反向地址解析。
PTR记录 Pointer Record 电⼦邮件系统中的⼀种数据类型⽤于反向地址解析定义PTR (Pointer Record),指针记录,是电⼦邮件系统中的⼀种数据类型,被互联⽹标准⽂件RFC1035所定义。
与其相对应的是A记录、地址记录。
⼆者组成邮件交换记录。
[1]A记录解析名字到地址,⽽PTR记录解析地址到名字。
地址是指⼀个客户端的IP地址,名字是指⼀个客户的完全合格域名。
⽤途PTR记录被⽤于电⼦邮件发送过程中的反向地址解析。
当正向域名解析完成后,还应当向您的线路接⼊商(ISP)申请做反向地址解析,以减少被国外机构退信的可能性。
反向解析⽅法检查域名MX PTR(反向解析)记录的⽅法:1) 在Windows系统中点击"开始"菜单→"运⾏"→"输⼊cmd"(Windows98系统为command),打开windows系统的MS-DOS界⾯。
输⼊"nslookup"命令,进⼊域名解析界⾯。
2) 输⼊" set q=mx "回车,进⼊MX记录查询状态输⼊您公司邮件服务器的主域名,即为⽤户邮件地址的"@"之后的部分如:,等本⽂以为例返回如下⼤致信息(蓝⾊部分为注释):> ――这是所查询的主域 Server: --这是当前所使⽤的DNS主机名 Address: 202.96.209.133--这是当前所使⽤DNS主机地址Non-authoritative answer: MX preference = 10, mail exchanger = MX preference = 10, mail exchanger = MX preference = 10, mail exchanger = --这是的MX记录指向的3个邮件主机名 internet address = 211.99.189.179 internet address = 211.99.189.180 internet address = 211.99.189.184--这是的MX记录指向的3个邮件主机名对应的IP地址 nameserver = nameserver = --这两个是负责解析的DNS服务器主机名 internet address = 61.151.243.136 internet address = 202.84.1.101--这两个是负责解析的DNS服务器主机名对应的IP地址--有时,查询MX纪录的结果中只有MX对应的主机名,但没有主机名对应的IP地址显⽰(如上海电信DNS的MX解析结果),还需要输⼊:> set q=a --进⼊A纪录解析模式再输⼊主机名解析IP地址:> --输⼊邮件服务器主机名进⾏查询>Non-authoritative answer:Name: Address: 211.99.189.179--得到IP地址3) 规范的MX记录应当由主域解析出⼀个主机名(本例中是),再由此主机名解析出⼀个或多个IP地址(本例中是 211.99.189.179和211.99.189.180),⽽不能直接由主域解析出⼀个IP地址,⽽且,主域解析出的主机名不应当同主域名相同。
汇编语言中各寄存器的作用汇编语言中各寄存器的作用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。