ARM中汇编指令的问题

如题所述

第1个回答  2022-10-20

ARM中汇编指令的问题

对,没错,loop就和C语言里面goto的那个标号是一样的,虽然在编写程序时只是一个标号,但是其深层意思,也就是其编译后的结果其实是一个地址,比如0x2000_1010。
你的上述程序解释如下:
ldrb ch , [src] , #1 ;以src中的值为地址,从该地址处取1字节数据到ch,再将src加1
strb ch , [dest] , #1 ;以dest中值为地址,将ch中1字节数存储在此处,再将dest加1
cmp ch , #0 ;比较ch和0的大小
bne loop ;如果ch不为0(注意这个"ne"),则跳至loop执行
很明显,这是一个字符串拷贝程序,从src地址处拿来,一字节一字节放到dest去,然后一边进行判断,看是否已拷贝到最后的结尾字符'0',如果没到,那么跳到loop处继续循环执行,如果已到,则继续往下执行。虽然你程序里没写loop标号位置,但应该是在ldrb指令前面,以达到循环的效果。

vc汇编指令的问题、。。。

jnz 这里jnz怎么跳 到 sub esp ,0x0c 这里
jnz lable1
sub esp,0x0c这里来 要怎么写
lable1:
sub esp,0x0c

几个汇编指令的问题

1,MOV AL,BX X
2,MOV AL,CL Y
3.INC [BX] X 属性不明
4.MOV 5,AL X 立即数,不能当做目的地
5.MOV [BX],[SI] X 两个操作数,不能都是存储器单元
6.MOV BL,F5H X 0F5H

关于OUT汇编指令的问题

OUT 03F8H,AL(这个指令有错误为什么?)
这是因为在OUT指令中直接用数字寻址,端口号只能是0到FFH,而上面这条
指令应改为
mov dx,03f8h ;只能放在DX,这是规定
out dx,al
-----------------------------------------
OUT 0FAH,AL(它是指从AL中输出一个字节到0FAH的一个端口吗?)
是的
---------------------------------------
OUT 0FAH,AX(AX是一个字为什么也能输出到0FAH所指的8位端口中呢?)
这条指令将AL中的数据放在0FAH,将AH中的数据放在0FBH
这四条指令主要就是说明这个OUT指令的不同用法
学这些指令不用硬记每条指令的各种用法,只要根据规定的寻址方式
记住相应指令所要用到的特定寄存器就行了

关于MOV汇编指令的问题

mov 0150[bx],ch(写法有问题)=mov byte ptr 0150[bx],ch
;0150[bx]=ds:[bx+0150](1个字节),而ch也为1个字节8位
;即把寄存器cx中的高8位(ch)内容传送给内存ds:[bx+0150]的空间中
ADC AL,[DI];带进位的加法指令
;[di]=ds:[di]=(2050A)=37H
;al=ax的低8位=94H
;结果37H+94H=CBH 没进位CF=0
daa指令没学

单片机汇编指令的问题

这两条指令肯定是有区别的,区别就在于比较数20D,
CJNE A,#20D,RETURN,这是累加器与20D,即十进数20相比较,这个数称为立即数。
而CJNE A,20D,RETURN,并不是与立即数20相比较,而是与地址是20的内部RAM单元内的数相比较,即这个20并不是比较数,而是RAM的单元地址,比较数在RAM中,具体是什么数,不知道,如果在这条指令之前给(20)单元内送数了,那比较数就是知道的。

汇编指令的简单问题

可以在DEBUG中编译,但是最后在MASM下编译,然后在DEBUG中修改调试,那样更容易在MASM编译时检查到不正确的地方!

一道关于汇编指令的问题

A.ADD [BX],[2000H] ;不允许两个操作数同为存储单元
B.ADC [SI][DI],AX ;只能使用一个变址寄存器
C.SUB [2000H],[20H] ;不允许两个操作数同为存储单元
D.SBB AX,BX ;正确

反汇编指令与汇编指令的区别?!

你说的是类似下面这样的吧?
0B4A:0100 5B POP BX
0B4A:0101 91 XCHG CX,AX
0B4A:0102 26 ES:
0B4A:0103 8B1D MOV BX,[DI]
0B4A:0105 8D365F91 LEA SI,[915F]
0B4A:0109 2E CS:
0B4A:010A 803C2F CMP BYTE PTR [SI],2F
0B4A:010D 7436 JZ 0145
0101A55F > $ 8BFF MOV EDI,EDI
0101A561 . 55 PUSH EBP
0101A562 . 8BEC MOV EBP,ESP
0101A564 . 83EC 44 SUB ESP,44
0101A567 . 56 PUSH ESI
0101A568 . 57 PUSH EDI
0101A569 . 6A 10 PUSH 10
=============================================
前面的十六进制数表示的是指令的机器码,没有必要刻意的去记忆这些机器码的.机器码非常不好记忆和阅读的,汇编语言的出现就是为了解决机器码难记忆,难识别的问题的
=============================================
有的时候是需要看的,不然没用的话显示它有什么用啊,有一句名言说的不是很好么:存在即合理
不过初学者一般不用看,但初学者研究研究机器码也不是件坏事

汇编指令的一个问题

这个要怎么说呢? 因为程序最终是要交由cpu来处理。 而汇编指令就是要告诉CPU该干什么。这就是指令,你从汉语理解指令,都因该知晓一二。 比如 mov AX,51H. 这就是一条汇编指令。 它的目的是告诉CPU 将51H送到AX寄存器。
至于你问的它和程序有什么关系。 你想下你写程序,是为了干什么呢? 不就是要CPU执行一段操作?程序最总还是要编译成一条条指令,交由CPU。指令是对于CPU而言,程序是个上层概念。
上面2段说的虽然很抽象,但我想大致说清楚了。 如悟性高,应该懂了, 再看不懂也没办法。 因为学习计算机程序设计上,你不可能不学着理解抽象思维。 这就是人之聪明否,直接影响学习进度。

相似回答