比如说1aH
转换成ASCII就是31h,41h
计算过程就是当<A时,+30h,否则加37h
mov mem,1ah
mov al,mem
and al,0f0h
shr al,4
cmp al,a
jb xx
add al,7h
xx:
add al,30h
mov dl,al
mov ah,02h
int 21h
mov al,mem
and al,0fh
cmp al,a
jb xxx
add al,7h
xxx:
add al,30h
mov dl,al
mov ah,02h
int 21h
汇编大多是指汇编语言,汇编程序。把汇编语言翻译成机器语言的过程称为汇编。在汇编语言中,用助记符(Memoni)代替 *** 作码,用地址符号(Symbol)或标号(Label)代替地址码。这样用符号代替机器语言的二进制码,就把机器语言变成了汇编语言。于是汇编语言亦称为符号语言。用汇编语言编写的程序,机器不能直接识别,要由一种程序将汇编语言翻译成机器语言,这种起翻译作用的程序叫汇编程序,汇编程序是系统软件中语言处理的系统软件。
你要一年前问我就能顺利一点地帮你解答了~当年汇编学的还行,现在忘记的差不多了。。不过我可以简单分析一下
MOV
R0,
#00H就是吧0放到R0这个寄存器,#0FFH这个是16进制的数,对应2进制11111111,,JZ是根据ZF决定是否跳转,ZF是标志寄存器中的一位,若ZF=1,则跳转,否则,不跳,ZF是看运算结果是不是0的,是0就为1,不是就为0。
那个P1是不是写错了?感觉应该是R1吧。。。
XRL
A
,
#0FFH,寄存器A中的内容和后面那个#0FFH执行逻辑异或 *** 作。结果存放在A中。
DJNZ是用来控制循环次数的,DJNZ
R3,SS,意思就是执行这一句,R3里面的数值自动减一,看是不是0,不是0就跳到SS的标识符语句后,是0就顺序执行。
DIV
AB应该是DIV
A,B吧,我感觉,就是用A里面的数除以B里面的数,结果放进A寄存器。
SJMP是相对转移指令,没有条件。
ACALL就是调用子程序,好像是多少字节距离内的可以调用,我忘了,不过这里不影响,就是调用MOV
R1,
#249这个。
NOP好像是用来清空标志位的。
汇编逻辑要求有点高,子程序调用这块要设计栈的栈底和栈顶指针的变化,我不太记得了,有点混乱。。。程序差不多就是表达个这个意思,结合这些然后转换成c的函数,看自己喜欢怎么写咯。
不好意思不能回答的很确切,我就记得那么多了~你如果在学那应该很容易解决,没有学的话可以看点资料,其实我觉得汇编很容易理解,比较底层么,直来直去的,就是逻辑有点麻烦~
有可能有些说的不确切,还望谅解~
VC60下有两种方法:
(1)增加参数/FA:Project->Setting,C/C++选项卡中的Project Options中增加参数/FA,编译后debug目录中将会增加对应源文件的汇编文件(asm)。
(2)如果想查看C语句对应的汇编代码的话,可以这样:F11单步调试,在debug工具栏中选择“disassembly”即可。每行C代码下面就是对应的汇编代码。
如果debug工具栏不见了,可在VC上方空白菜单处右键,选择“debug”即可d出debug工具栏。
例如:
C代码程序:
int main()
{
int a = 3;
int b = 4;
int c = a + b;
printf("c=%d/n", c);
return 0;
}
对应的汇编代码程序(部分)如下:
5: int a = 3;
00401028 mov dword ptr [ebp-4],3
6: int b = 4;
0040102F mov dword ptr [ebp-8],4
7: int c = a + b;
00401036 mov eax,dword ptr [ebp-4]
00401039 add eax,dword ptr [ebp-8]
0040103C mov dword ptr [ebp-0Ch],eax
gcc下编译加参数-S,如gcc ac -S,编译后会自动生成汇编文件aasm。
以上就是关于用汇编怎么将16进制转ASCII码全部的内容,包括:用汇编怎么将16进制转ASCII码、汇编转换c语言:将下面的一段代码转换成C语言、如何将C语言代码转换为对应的汇编代码等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)