XOR BX,BX MOV BL,AL MOV AX,TAB[BX*2]//为什么这里会报错,而如何用EBX就可以通过呢? MOV XXX,AX

作者&投稿:谷月 (若有异议请与网页底部的电邮联系)
MOV DX,[SI] MOV AX,[1234H] MOV 100[BX],AL MOV [BP][SI],AX MOV [BX+100][SI],AX 求这些指令的寻址方式~

MOV DX,[SI]
源操作数:间接寻址
目的操作数:寄存器寻址
MOV AX,[1234H]
源操作数:直接寻址
目的操作数:寄存器寻址
MOV 100[BX],AL
源操作数:寄存器寻址
目的操作数:相对寻址
MOV [BP][SI],AX
源操作数:寄存器寻址
目的操作数:基址变址寻址
MOV [BX+100][SI],AX

源操作数:寄存器寻址
目的操作数:相对基址变址寻址

想问什么呢? 如果是想知道程序运行结果,我想还是自己在本上写写算算,挺简单的小程序,好好学吧,实在不会再问我好了~

1、原因在编译器。
2、
XOR EBX,EBX
MOV BL,AL
MOV AX,TAB[EBX*2]//正确!
MOV XXX,AX
从这几句看出你在编写32码段(即32位地址),MOV XXX,AX,其中下XXX应为地址。
另外MOV AX,TAB[EBX*2]//正确!说明编译器支持。
3、XOR BX,BX MOV BL,AL MOV AX,TAB[BX*2]报错说明编译器不支持。

----------------------- 页635-----------------------
MOV—传送

操作码 指令 64位模式 非64位模式 描述

88 /r MOV r/m8,r8 有效 有效 传送 r8 to r/m8.

REX + 88 /r MOV r/m8***,r8*** 有效 N.E. 传送 r8 to r/m8.

89 /r MOV r/m16,r16 有效 有效 传送 r16 to r/m16.

89 /r MOV r/m32,r32 有效 有效 传送 r32 to r/m32.

REX.W + 89 /r MOV r/m64,r64 有效 N.E. 传送 r64 to r/m64.

8A /r MOV r8,r/m8 有效 有效 传送 r/m8 to r8.

REX + 8A /r MOV r8***,r/m8*** 有效 N.E. 传送 r/m8 to r8.

8B /r MOV r16,r/m16 有效 有效 传送 r/m16 to r16.

8B /r MOV r32,r/m32 有效 有效 传送 r/m32 to r32.

REX.W + 8B /r MOV r64,r/m64 有效 N.E. 传送 r/m64 to r64.

8C /r MOV r/m16,Sreg** 有效 有效 传送段寄存器到 r/m16.

REX.W + 8C /r MOV r/m64,Sreg** 有效 有效 传送 零 扩展 16位段寄存器 to r/m64.

8E /r MOV Sreg,r/m16** 有效 有效 传送 r/m16 to段寄存器。

REX.W + 8E /r MOV Sreg,r/m64** 有效 有效 传送 低16位 of r/m64 to段寄存器。

A0 MOV AL,moffs8* 有效 有效 传送 字节 at (seg:offset)到 AL.

REX.W + A0 MOV AL,moffs8* 有效 N.E. 传送 字节 at (offset) to AL.

A1 MOV AX,moffs16* 有效 有效 传送 字 at (seg:offset) to AX.

A1 MOV EAX,moffs32* 有效 有效 传送 双字 at (seg:offset) to EAX.

REX.W + A1 MOV RAX,moffs64* 有效 N.E. 传送四字at (offset) to RAX.

A2 MOV moffs8,AL 有效 有效 传送 AL to (seg:offset)。***

REX.W + A2 MOV moffs8 ,AL 有效 N.E. 传送 AL to (offset)。

A3 MOV moffs16*,AX 有效 有效 传送 AX to (seg:offset)。

A3 MOV moffs32*,EAX 有效 有效 传送 EAX to (seg:offset)。

REX.W + A3 MOV moffs64*,RAX 有效 N.E. 传送 RAX to (offset)。

B0+ rb MOV r8, imm8 有效 有效 传送 imm8 to r8. ***

REX + B0+ rb MOV r8 , imm8 有效 N.E. 传送 imm8 to r8.

B8+ rw MOV r16, imm16 有效 有效 传送 imm16 to r16.

B8+ rd MOV r32, imm32 有效 有效 传送 imm32 to r32.

REX.W + B8+ rd MOV r64, imm64 有效 N.E. 传送 imm64 to r64.

C6 /0 MOV r/m8, imm8 有效 有效 传送 imm8 to r/m8.

REX + C6 /0 MOV r/m8***, imm8 有效 N.E. 传送 imm8 to r/m8.

C7 /0 MOV r/m16, imm16 有效 有效 传送 imm16 to r/m16.

----------------------- 页636-----------------------

C7 /0 MOV r/m32, imm32 有效 有效 传送 imm32 to r/m32.

REX.W + C7 /0 MOV r/m64, imm32 有效 N.E. 传送 imm32 sign 扩展 到64位 to r/m64.

MOV AX,TAB[BX*2]//
改成ADD BX,BX
mov ax,tab[bx]
mov [],tab[?] ?为寄存器,不是表达式


崇明县19158845980: XOR BX什么意思 -
剧春除痰: XOR BX,BX //对本身进行异或运算,清空寄存器bx MOV CX,10 //给寄存器cx赋值10 LPP:MOV AH,1 //给寄存器ah赋值1INT 21H //16进制数21(H表明该数字为16进制数)自减1MOV AH BH //bh的值赋给ah寄存器ADD AL,BL //寄存器al加上bl的值结果在al中存放AAA //不了解,呵呵MOV BX, AX //ax中的值赋给bx寄存器LOOP LPP //回到lpp. 素我直言,,,该程序有点问题哦..

崇明县19158845980: 汇编语言XOR BX,BX -
剧春除痰: XOR BX,BX 是异或指令,对应位相同则为0,不同为1,所以相同的两个数相异或,结果为0,同时XOR又属于逻辑运算指令,该类指令执行后标志位清0,也就是FLAG=0.INC AX和ADD AX,1还是不同的,INC只是不影响CF,其它和ADD相同.

崇明县19158845980: 汇编语言中用那条指令来计算字符串的长度 -
剧春除痰: 看你用哪种汇编语言了,NASM中是 message db 'hello, world' msglen equ $-message$:当前语句的地址 NASM中变量和标签是一样的应该没有直接的指令吧.要是有的话,它需要两个操作数,一个是字符串的首字符的地址,一个是末字符的地址,那么它不就是减法指令吗.

崇明县19158845980: XOR BX,BX MOV BL,AL MOV AX,TAB[BX*2]//为什么这里会报错,而如何用EBX就可以通过呢? MOV XXX,AX -
剧春除痰: 1、原因在编译器.2、 XOR EBX,EBX MOV BL,AL MOV AX,TAB[EBX*2]//正确!MOV XXX,AX 从这几句看出你在编写32码段(即32位地址),MOV XXX,AX,其中下XXX应为地址.另外MOV AX,TAB[EBX*2]//正确!说明编译器支持.3、...

崇明县19158845980: 汇编程序求教 -
剧春除痰: 1、这题用16位程序就可以完成了 code segment assume cs:code start: xor bx,bx ;初始化寄存器bx mov cx,404h ;高8位用来计数,低8位存放位移位数 ls_in: shl bx,cl ;bx向左移4位 lp_in: mov ah,8h ;8号中断-输入一个字符,不回显 int 21h cmp al,...

崇明县19158845980: 用简单的汇编语句实现2进制数的16进制输出,假定1A8B -
剧春除痰: XOR BX,BX ;BX里面放输入后经转换的2进制数 MOV CL,04 ;转换的时候移位次数 MOV AH,01 MOV DI,4 ;循环4次输入 LP1: SHL BX,CL ;由于最高位也只移3个4位,所以就放在前面. INT 21H SUB AL,30H ;输入的1位数与0的ascii比较 CMP AL,9 JBE DEAL1 ;不小于9的为A,B,C等值 SUB AL,7 ;根据位置关系再减7 DEAL1: ADD BL,AL ;转换后的数存入BL DEC DI CMP DI,0 JNZ LP1这是16进制的2进制

崇明县19158845980: 编写统计AX中1、0个数的程序.0的个数存入CH,1的个数存入CL. -
剧春除痰: 核心代码:.code start: xor cx,cxmov ax,9;初始为9 lp: shl ax,1 jc x1;如果是1,就加上 jz ext jmp lp x1: inc cx;CX中保存了1的个数.CXjmp lp ext: mov bx,10h sub bx,cx mov ch,bl;用16减去cx中1的个数,得到0的个数,保存至CH中. end start

崇明县19158845980: 阅读下面的程序段,XOR BX,BXMOV CX,20MOV AX,1L1:TEST AX,1 JNZ L2 ADD BX,AXL2:INC AXLOOP L1(1)程序段执行后,BX寄存器的内容是什么?... -
剧春除痰:[答案] XOR BX,BX #BX清零 MOV CX,20 #CX赋值为20 MOV AX,1 #AX赋值为1 L1: TEST AX,1 #测试AX和1是否相等? JNZ L2 #结果不相等就跳转到L2执行? ADD BX,AX #结果相等->BX=BX+AX 21 L2: INC AX #AX清零? LOOP L1 #从L1开始循环

崇明县19158845980: 用汇编语言编一程序段,完成表达式(2x+4y)/2的运算 -
剧春除痰: 可不可以先化简哦,化了就是x+2y了 设x,y都是字节 xor ax, ax mov al, x sal ax, 1 xor bx, bx mov bl, y sal bx, 1 sal bx, 1 add ax, bx mov bl 2 div bl ;如果是有符号,改成idiv bl 结果在ax中, al商,ah余数 化简后的程序 xor ax, ax mov al, y sal ax, 1 add al, x adc ah, 0 结果在ax中

崇明县19158845980: 用汇编语言编写程序:从键盘输入5个数(0~9),找其中最大值并显示!急求!!谢谢!!! -
剧春除痰: ;程序硬性规定了输入要1 2 8 6 1 这样输入, 即每输入1数字就要空一格assume cs:code, ds:data data segment STR db 0AH,0DH,"Please input five number(0~9): $" BUF db 20 db ? db 20 dup (?) MAX db ? CRLF db 0AH,0DH,'$' ...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网