JMP如何寻址???

jacky_shen 2004-06-28 02:38:08
JMP FAR PTR XXXX
JMP DWORD PTR XXXX[基/变址寄存器]
对上面两个寻址的方式有点模糊,能否详细的告诉我。谢谢


"偏移地址" 是否就是 "有效地址" ???

"偏移地址" = "有效地址" ???
...全文
425 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
W32API 2004-06-29
  • 打赏
  • 举报
回复
哦,
FF /4 JMP r/m16 Jump near, absolute indirect, address given in r/m16
FF /4 JMP r/m32 Jump near, absolute indirect, address given in r/m32
这两个使用段内偏移地址,而不是相对于下一指令的相对地址。
W32API 2004-06-29
  • 打赏
  • 举报
回复
EB cb JMP rel8 Jump short, relative, displacement relative to next instruction
E9 cw JMP rel16 Jump near, relative, displacement relative to next instruction
E9 cd JMP rel32 Jump near, relative, displacement relative to next instruction
FF /4 JMP r/m16 Jump near, absolute indirect, address given in r/m16
FF /4 JMP r/m32 Jump near, absolute indirect, address given in r/m32
以上是近跳转(段内偏移地址(相对于下一条指令)),英文说明里面都有了
far 使用完整的跳转格式 16:16 或者 16:32,绝对地址(注意,不是物理地址)

JMP FAR PTR XXXX
仅是这样给出的话,我还真的不能确定是用哪个,如果用 ptr 16:16 或 ptr 16:32 的话,那应该给出完整的跳转格式地址。如果用 m16:16 或 m16:32 的话,那 xxxx 就是存储跳转目的的内存地址。

JMP DWORD PTR XXXX[基/变址寄存器]
这个跳转使用
FF /4 JMP m16:32 Jump near, absolute indirect, address given in m16:32
XXXX[基/变址寄存器] 是存储跳转目的的内存地址

上面的那些地址限定标记都是由编译器提供的,让你可以选定需要使用的跳转类别,否则编译器无法断定应该使用哪种跳转指令。


至于偏移地址和有效地址,从我的观点,只能说是国人写的书比较喜欢创造,有效地址不要理会也罢。。。
W32API 2004-06-29
  • 打赏
  • 举报
回复
JMP DWORD PTR XXXX[基/变址寄存器]
这个跳转使用
FF /4 JMP m32 Jump near, absolute indirect, address given in m32
XXXX[基/变址寄存器] 是存储跳转目的的内存地址

真的有点疯,COPY 都会出错。。。

programfanny 2004-06-28
  • 打赏
  • 举报
回复
在汇编中用的是标号,经过汇编后的obj及exe/com文件是用的是(+/-)偏移量(记ofs),来表示从该指令下一条指令的首地址转移的偏移值,即 NewIP=CurrentIP+ofs
jacky_shen 2004-06-28
  • 打赏
  • 举报
回复
跳转到的地方是如何计算的呢?
Areslee 2004-06-28
  • 打赏
  • 举报
回复
SHORT NEAR WORD都是段内跳转
DWORD FAR是段间跳转
PTR是介词
jacky_shen 2004-06-28
  • 打赏
  • 举报
回复
JMP FAR PTR XXXX

XXXX 前面的修饰 FAR PTR 还有更多的 SHORT,WORD PTR ,NEAR 等等,都是如何操作的,如何使用的?
Areslee 2004-06-28
  • 打赏
  • 举报
回复
李诚你举个例吧,对初学者来说你给的这段和天书没啥区别。。。。。。
JMP XXXX
意思就是跳转到XXXX执行
JMP DWORD XXXX[YYY]
意思就是取内存XXXX的偏移地址加上YYY的值处的一个双字作为目标地址,跳转到目标地址执行
W32API 2004-06-28
  • 打赏
  • 举报
回复
EB cb JMP rel8 Jump short, relative, displacement relative to next instruction

E9 cw JMP rel16 Jump near, relative, displacement relative to next instruction

E9 cd JMP rel32 Jump near, relative, displacement relative to next instruction

FF /4 JMP r/m16 Jump near, absolute indirect, address given in r/m16

FF /4 JMP r/m32 Jump near, absolute indirect, address given in r/m32

EA cd JMP ptr16:16 Jump far, absolute, address given in operand

EA cp JMP ptr16:32 Jump far, absolute, address given in operand

FF /5 JMP m16:16 Jump far, absolute indirect, address given in m16:16

FF /5 JMP m16:32 Jump far, absolute indirect, address given in m16:32
  • 打赏
  • 举报
回复
我觉得偏移地址就是当前代码所在的地址到目标地址的偏移量。
JMP DWORD PTR XXXX[基/变址寄存器] 应该是 JMP FAR PTR XXXX
再加上[基/变址寄存器]内的偏移量的地址。
第三章 8086/8088的寻址方式和指令系统 练习题 一.单项选择题 1.设BX=2000H,SI=3000H,指令MOV AX,[BX+SI+8]的源操作有效地址为( )。 A.5000H B.5008H C.23008H D.32008H 2.设DS=1000H,ES=2000H,BX=3000H,指令ADD AL,[BX]的源操作数的物理址为(  )。 A.13000H B.23000H C.33000H D. 3000H 3.设DS=2000H,ES=3000H,SI=200H,指令MOV ES:[SI],AL的目的操作数的物理地址为( )。 A.20200H B.30200H C.50200H D.200H 4.指令MOV MEM[BX],AX中的MEM是( )。 A.原码 B.反码 C.补码 D.移码 5.用来作为寄存器间接寻址的寄存器有( )个。 A.8 B.6 C.5 D.4 6.指令MOV [BX+SI],AL中的目的操作数使用( )段寄存器。 A.CS B.DS C.SS D.ES 7.指令MOV BX,[BP+5]中的源操作数使用( )段寄存器。 A.CS B.DS C.SS D.ES 8.段内间接寻址只改变( )中的内容。 A.CS B.IP C.CS和IP D.PSW 9.段间间接寻址只改变( )中的内容。 A.CS B.IP C.CS和IP D.PSW 10.下述指令中不改变PSW的指令是( )。 A.MOV AX,BX B.AND AL,0FH C.SHR BX,CL D.ADD AL,BL 11.下述指令中不影响CF的指令是( )。 A.SHL AL,1 B.INC CX C.ADD [BX],AL D.SUB AX,BX 12.两个整数补码9CH和7AH相加运算后,会产生( )。 A.无溢出且无进位 B.无溢出但有进位 C.有溢出且有进位 D.有溢出但无进位 13.指令JMP WORD PTR [BX]属于( )寻址。 A.段内直接 B.段内间接 C.段间直接 D.段间间接 14.指令MOV AX,[BX+SI+8]的源操作数属于( )寻址。 A.直接 B.寄存器相对 C.基址变址 D. 相对基址变址 15.指令( )不改变CF的内容。 A.DEC AL B.ADD AX,CX C.SUB [BX],CL D.SBB AL,DL 16.十进制数字74所对应的压缩型BCD码的形式是( )。 A.74 B.74H C.4AH D.4A 17.十进制数字85所对应的非压缩型BCD码的形式是( )。 A.0085 B.0085H C.0805 D.0805H 18.设AL=67H,执行“CMP AL,76H”后,AL=( )。 A.76H B.0DFH C.67H D.00 19.设AL=65H,BL=29H,执行下列指令后,AL=( )。 ADD AL,BL DAA A.8EH B.94 C.94H D.8E 20.压栈操作是( )位数的操作。 A.8 B.16 C.32 D.任意 21.执行IMUL指令时,如果乘积的高位部分不是低位部分的符号扩展,则( )。 A.OF=0、CF=0 B.OF=0、CF=1 C.OF=1、CF=0 D.OF=1、CF=1 22.设AX=3762H,CL=5,执行“SHR AX,CL”后,AX=( )。 A.0376H B.01BBH C.01BB D.0376 23.若要在BUF缓冲区中寻找与AL中不相等的数据,应使用( )SCASB串操作指令。 A.REPNE B.REP C.REPE D.REPNZ 24.如果“JNC L”指令的操作码放在0040H,转移后在0020H处取下一条指令的操 作码,那么该条指令的位移量是( )。 A.20H B.1EH C.0DEH D.0E0H 25.如果“JA P”指令的操作码放在0050H, 该指令的位移量为34H,执行完此条指 令转移到取下一条指令的偏移地址为( ) A.0082H B.0084H C.0086H D.0088H 26.若DS=1000H,BX=2000H,(12000H)=56H,(12001H)=78H,AX=1000H,执行 “ADD AX,[BX]”指令后,AX=( )。 A.8856H B.6678H C.8800H D.6600H 27.设AX、BX寄存器中存放的是有符号的二进制数据,若执行“CMP AX,BX”指 令后,( )L表示大于则转L。 A.JZ B.JA C.JGE D.JG 28.执行“DIV BX”指令后,( )寄存器中存放商。 A.AL B.AH C.AX D.DX 29.执行“( )AX,BX”指令不改变AX寄存器中的内容。 A.CMP B.ADD C.XOR D.OR 30.若AX=1000H,执行“NEG AX”指令后,AX=( )。 A.1000H B.0E000H C.0F000H D.1001H 二.多项选择题 1.在下列寻址方式中,用来访问内存的寻址方式有( )。 A.寄存器寻址 B.寄存器间接寻址 C.寄存器相对寻址 D.直接寻址 2.用来作为寄存器间接寻址的寄存器有( )。 A.AX B.BX C.BP CX 3.在下列指令中,源操作数使用DS段寄存器进行寄存器相对寻址的有( )。 A.MOV AX,[DI+4] B.MOV AX,ES:[SI+8] C.MOV AX,[BP+4] D.MOV AX,[BX+4] 4.在下列指令中,源操作数的寻址方式是错误的有( )。 A.MOV AX,[DI+BX] B.MOV AX,[SI+DI] C.MOV AX,[BP+BX] D.MOV AX,[DX] 5.在下列指令中,属于段内转移指令的有( )。 A.JMP SHORT A B.JMP [BX] C.JMP DWORD PTR [BX] D.JMP NEAR PTR [BX+SI] 6.在下列指令中,错误的指令有( )。 A.SUB 5,AL B.ADD AL,BX C.INC [BX] D.SHR AX,6 7.执行“CMP AX,8003H”指令后,当AX中的无符号数高于8003H时,下列指令中有效的转移指令有( )。 A.JNB L B.JA L C.JG L D.JNL L 8.可与串操作指令“CMPSW”指令配合使用的重复前缀有( )。 A.REP B.REPZ C.REPNZ D.REPE 9.在下列的输入/输出指令中,正确的指令有( )。 A.IN AX,80H B.OUT DX,AX C.IN AL,340 D.OUT DX,AL 10.在下列的指令中,错误的指令有( )。 A.PUSH AL B.MOV AL,BX C.PUSH 1000H D.CALL AX 11.可以用下列指令代替“LOOP L”指令的有( )。 A.DEC CX B.DEC CX JNZ L JNC L C.DEC CX D.DEC CX CMP CX,0 JE L JE L 三.填空题 1.在一条指令中,立即数只能作 操作数。 2.8086/8088 CPU形成的内存物理地址有 位。 3.指令“MOV AX,[BX+SI]”的源操作数在内存的 段。 4.指令“MOV BX,[BP+DI]”的源操作数在内存的 段。 5.指令“MOV AX,ES:[SI]”的源操作数在内存的 段。 6.入栈指令使用的是 段。 7.指令“ADD [BX+SI],AL”的目的操作数是 寻址方式。 8.指令“SUB BX,A[SI]”的源操作数是 寻址方式。 9.指令“JMP DWORD PTR [BX]”属于 寻址方式。 10.可作为寄存器间接寻址的寄存器有 个。 11.堆栈是从 地址向 方向生长的。其操作遵循 的操作原则。 12.在进行弹栈操作时应该先将弹出的数据送 ,然后 。 13.在进行多精度加法运算时,一般使用 指令。 14.通用的数据传送指令不影响 。 15.“INC AL” 指令不影响标志位的 位。 16.若AL=11H,执行“NEG AL” 后,AL= 。 17.JMP指令的执行 PSW寄存器中的各位。 18.两个无符号数进行比较时,可以根据 标志位来判断大小。在编写程序时可使用 指令来实现。 19.若执行“DIV BX”,其被除数的高16位必须放在 ,低16位必须放在 。 20.DAA指令只对 寄存器中的内容进行调整。 21.若AL=84H,在执行CBW后,AL= 。 22.十进制数1234的压缩型BCD码为 。 23.执行 AND AL,0FH JNZ L 指令,是检测AL中的 位,当它为非零则转移。 24.若移位指令的移位位数大于1时,其移位位数必须放在 中。 25.如果AL=85H,CL=4,执行“SAR AL,CL”时,AL= ,CF= 。 26.在串操作指令中,SI指向 串,DI指向 串。 27.如果要查找某串中与AL寄存器中有相同的字符(数),则在SCASB指令前应配合使用 重复前缀。 28.转移指令“JNZ L ”的转移范围(十进制)是 。该指令的第二个字节为位移量,用 形式表示。 29.段内调用指令改变 中的内容。 30.段间调用指令改变 中的内容。 四、判断题(判断下列指令是否正确,如果是错误的,请指出错误的原因) 1.ADD AL,BX 2.MOV [BX],SI 3.SUB [BX],[SI] 4.CMP 5,AL 5.MOV CX,AX 6.LEA BL,A 7.SHR AL,6 8.MOV AL,[DI+SI] 9.MOV BL,200H 10.MOV AX,DATA 11.INC [BX] 12.CMP [BX],A ;A为变量 13.MOV AX,‘+’ 14.MOV AX, [BP+BX] 15.ADD AX,[CX] 16.OUT 400,AL 17.JNC P 18.MOV BX,,OFFSET A 19.LEA DI,A[SI] 20.CMP AX,5 五.改错题(按下列指令中的原意改正下列指令) 1.DEC [SI] 2.CMP AL,BX ;8位无符号数比较 3.MOV [DX],AL 4.MOV AL,300H 5.MOV [BX],[DI] ;字节操作 6.ADD AL,[CX+SI] 7.ADD AL,BX ;16位带符号数相加 8.PUSH AL 9.CMP [BX],5 ;字节比较 10.MOV DS,1234H 六.简答题 1.设BX=1000H,SI=2000H,位移量D=3000H,请指出下列各种寻址方式的有效地址是什么? (1)使用D的直接寻址 (2)使用BX寄存器的间接寻址 (3)使用BX寄存器的相对寻址 (4)基址变址寻址 (5)相对基址变址寻址 2.请指出下列各条指令的源操作数的寻址方式是什么? (1)MOV AX,BUF (2)CMP AL,5 (3)ADD [BX+5],AX (4)SUB AX,[BX+SI] (5)ADC AH,A[SI] (6)MOV BX,[SI] (7)AND CX,B[BP+SI] (8)JMP WORD PTR [BX] (9)JMP P (10)JMP FAR PTR P 3.设 DS=2000H, BX=0100H, SI=0002H, (20100H)=12H, (20101H)=34H, (20102H)= 56H, (20103H)= 78H, (21200H)= 2AH, (21201H)= 4CH, (21202H)=B7H,(21203H)=65H,试说明下列各条指令执行完后AX寄存器中的内容是多少? (1)MOV AX,1200H (2)MOV AX,BX (3)MOV AX,[1200H] (4)MOV AX,[BX] (5)MOV AX,[BX+1100H] (6)MOV AX,[BX+SI] (7)MOV AX,[BX+SI+1100H] 4.按下列各小题的要求写出相应的一条汇编语言指令。 (1)把BX寄存器和DX寄存器的内容相加,结果存入DX寄存器中 (2)以BX和SI寄存器作基址变址寻址方式,把该单元中的一个字传送到AX。 (3)以SI和位移量20H作寄存器相对寻址,将该单元中的内容与CX寄存器中的内容相加,结果存入CX寄存器中 (4)清除AX寄存器的内容,同时清除CF标志位 (5)将字单元NUM与0B6H进行比较 5.按下列各小题的要求使用相应的几条指令完成其操作。 (1)将偏移量为200H的存储单元中的数与300H相加,结果存入AX寄存器中 (2)比较AX寄存器中与BX寄存器中的16位有符号数,当AX中的内容大于BX中的内容时转移到L。 (3)将BUF1和BUF2中的16位数据交换 (4)测试BUF字缓冲区中第15位,如果为1则转移到P (5)将BUFI和BUF2的字相加,结果送S缓冲区 6.设BX=8234H,请说明下列两条指令的区别,执行下列各指令后BX中的内容是什么? SHR BX,1 SAR BX,1 7.分别说明下列每组指令中的两条指令的区别。 (1) MOV BX,BUF LEA BX,BUF (2) OR BL,0FH AND BL,0FH (3) JMP SHORT L JMP L (4) MOV AX,BX MOV AX,[BX] (5) MOV AX,[BX+DI] MOV AX,[BP+DI] 8.说明下列各指令的源操作数和目的操作数的存储地方。 (1)MOV [2000H],AX (2)ADD AX,[BX+5] (3)LEA SI,BUF (4)DAA (5)MUL BL 9.指出下列无条件转移指令的转移目标地址是什么?存放在何处? (1)JMP BX (2)JMP WORD PTR [BX] (3)JMP DWORD PTR [BX] (4)JMP P (5)JMP SHORT R 10.说明MOVSB和CMPSB各能使用哪些重复前缀? 七.程序分析题 1.现有程序段如下: MOV AX,1234H MOV BX,60H ADD AX,BX 请回答 :(1)该程序段完成的功能是什么? (2)程序段执行完后AX= 。 2.现有程序段如下: MOV AX,0603H MOV BL,8 AAD DIV BL 请回答 :(1)该程序段完成的功能是什么? (2)程序段执行完后AX= 。 3.设AX=0D023H,BX=9FD0H,试分析执行完如下程序段后程序转向何处? ADD AX,BX JNO L1 JNC L2 SUB AX,BX JNC L3 JNO L4 JMP L5 4. 程序段如下: MOV AX,X MOV DX,X+2 ADD AX,Y ADC DX,Y+2 ADD AX,36 ADC DX,0 SUB AX,Z SBB DX,Z+2 MOV W,AX MOV W+2,DX 请回答 :(1)该程序段完成的功能是什么? (2)该程序的操作数是何类型? (3)结果存放在何处? 5.设A为字节变量,变量中的内容分别为64H、52H;B为字节变量,变量中的内容分别为12H、46H,现有程序段如下: MOV AL,A SUB AL,B DAS MOV C,AL MOV AL,A+1 SBB AL,B+1 DAS MOV C+1,AL 请回答 :(1)该程序段完成的功能是什么? (2)最后结果是什么? 6.现有程序段如下: MOV BL,AL MOV CL,4 SHR BL,CL MOV A,BL AND AL,0FH MOV B,AL 请回答 :(1)该程序段完成的功能是什么? (2)如果AL的初值为56H,则A= ,B= 。 7.现有程序段如下: MOV AL,8 MOV BL,7 MUL BL AAM ADD AX,3030H XCHG AH,AL MOV BUF,AX 请回答 :(1)该程序段完成的功能是什么? (2)BUF两个单元中的值分别为 。 8.现有程序段如下: MOV AX,M MOV DX,N SHR DX,1 RCR AX,1 请回答 :(1)该程序段完成的功能是什么?     (2)若M=1234H,N=5678H,程序运行后DX= ,AX= 。 9.现有程序段如下: XOR AX,AX MOV AX,6342H MOV CX,0404H ROL AH,CL XCHG CH,CL ROR AL,CL 请回答 :(1)该程序段执行后AX= 。 (2)CF= 。 10.现有程序段如下: MOV AX,1 MOV BX,2 MOV CX,4 MOV DX,3 L: INC AX ADD BX,AX SHR DX,1 LOOPNZ L 请回答 :(1)该程序段的循环次数是多少? (2)该程序段执行完后AX= ,BX= ,CX= ,DX= 。 11.现有程序段如下: MOV CX,16 MOV BL,0 MOV DX,1 MOV AX,9AB8H L: TEST AX,DX JZ N INC BL N: SHL DX,1 LOOP L MOV M,BL 请回答 :(1)该程序段完成的功能是什么? (2)该程序段执行完后(M)= 。 12.现有程序段如下: CLD MOV SI,OFFSET BUF1 MOV DI,OFFSET BUF2 MOV CX,100 REP MOVSB 请回答:该程序段完成的功能是什么? 13. 现有程序段如下: CLD LEA DI,BUF MOV AL,20H MOV CX,100 REPNZ SCASB 请回答 :(1)该程序段完成的功能是什么? (2)若ZF=1,表示BUF中 值为20H数据 (3)若BUF的首地址为0,ZF=0,执行完该程序段后DI= 。 14.现有程序段如下: MOV AL,0 MOV BL,1 MOV CX,10 L: ADD AL,BL INC BL LOOP L 请回答 :(1)该程序段完成的功能是什么? (2)该程序执行完后,AL= 。 15.现有程序段如下: MOV AX,M CMP AX,N JA L MOV AX,M+2 CMP AX,N+2 JAZ L MOV BYTE PTR FLG , 0 JMP P L: MOV BYTE PTR FLG , 1 P: … 请回答 :(1)该程序段完成的功能是什么? (2)若M=1234H,N=5678H,则FLG= 。 16.现有程序段如下: MOV CX,100 LEA BX,BUF MOV DX,0 L1:MOV AL,[BX] CMP AL,10 JL L2 INC DX L2:INC BX LOOP L1 请回答 :(1)该程序段完成的功能是什么? (2)如果将JL改为JG,该程序段完成的功能又是什么? 17.设TAB中存放的数据为30H,31H,32H,33H,34H,35H,36H,37H,38H,39H,现有程序段如下: LEA BX,TAB MOV AL,X ;X为数字0~9 XLAT 请回答 :(1)该程序段完成的功能是什么? (2)若X中的内容为4,则AL= 。 18.现有程序段如下: LEA SI,BUF1 LEA DI,BUF2 MOV CX,100 L: MOV AL,[SI+100] MOV [DI],AL INC DI DEC SI LOOP L 请回答:该程序段完成的功能是什么? 19.现有程序段如下: MOV AX,BUF CMP AX,0 JNS L MOV BX,BUF+2 NEG BX MOV BUF+2,BX NOT AX ADC AX,0 MOV BUF,AX L: … 请回答:该程序段完成的功能是什么? 20.现有程序段如下: MOV AL,X AND AL,0FH JZ L MOV BYTE PTR FLG,1 JMP M L: MOV BYTE PTR FLG,0 M: … 请回答:该程序段完成的功能是什么? 八.程序设计题 1.使用串操作指令,将BUF缓冲区中的100个字节清0。 2.比较5个字节的字符串A和B,若两个串相等则字节标志单元FLG置0;否则清1。 3.设BUF缓冲区中有100个字数据。编写程序段统计100个字数据中数据为0的个数,并将统计的结果存放在DL寄存器中。 4.计算Z=(X+5)*Y+30,(X,Y为无符号字节数据)。 5.将DX:AX:BX中的48位数乘以2。 6.将有100个字符的缓冲区BUF中的$符号用空格(20H)代替。 7.将有符号的字数据A和B中的大者存入C中。 8.测字单元A中的第四位是否为0,是则FLG置1,否则清0。 9.将DX:AX中的32位数据逻辑左移2位。 10.将100个元素的字数组A中的每个元素减1。  

21,497

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧