解释下面出来的结果,汇编语言知识
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了解释下面出来的结果,汇编语言知识相关的知识,希望对你有一定的参考价值。
1, MOV AX,NOT 0F0H
执行结果:MOV AX,0FF0FH
2,MOV CL,0FFH XOR 0F0H
执行结果:MOV CL,0FH
3,假设VALUE=50,MOV AX,VALUE SHR2
执行结果:MOV AX,000CH
1,NOT 是“非”的意思,就是取反,0F0H换成16进制就是00F0H了,取反就是0FF0FH了;
2,XOR 是“异或运算”(两个二进制数,每位异或的结果是,相同取0,不同取1),指令中的两个操作数分别是 00FFH,00F0H,异或的结果就是 000FH了;
2,SHR2 意思应该是“右移两位”,50是十进制数,换成二进制就是 110010B,右移两位,结果就是 1100B了(前面不够16位的补0),也就是000CH; 参考技术A 如果不懂的话,把16进制的数,转成2进制。
f0 =1111 0000
mov ax,0FFOFH //是对一个16位寄存器的操作
al=f0 ah=00
NOT 00f0 = NOT 0000 0000 1111 0000 = 1111 1111 0000 1111
------------------------------------- f f 0 f
注意两点:
对哪个寄存器的操作,是16位?是8位?是高8位?是低8位?
逻辑运算
C语言,下面打印出来的结果是Segmentation fault: 11
#include <stdio.h>
#include <string.h>
int main(void)
char ch[20]=;
char ch1;
int i=0;
scanf("%s",ch);
getchar();
scanf("%c",&ch1);
char *p=strchr(ch,ch1);
while(ch[i]!='\0')
if(p!=NULL)
printf("%lu\n",p-ch+1);
p = strchr(p+1,ch1);
i++;
return 0;
#include <string.h>
int main(void)
char ch[20]=;
char ch1;
int i=0;
scanf("%s",ch);
getchar();
scanf("%c",&ch1);
char *p=strchr(ch,ch1);
while(p)
printf("%lu\\n",p-ch+1);
p = strchr(p+1,ch1);
return 0;
修改如上
如果p为NULL执行 strchr(p+1,ch1);时会出错
所以当p为NULL的时候 直接退出循环(ch中没处理的字符中没有ch1的情况)
参考技术A #include <stdio.h>#include <string.h>
int main(void)
char ch[20]=0;
char ch1;
int i=0;
scanf("%s",ch);
getchar();
scanf("%c",&ch1);
char *p=strchr(ch,ch1);
while(p)
printf("%lu\\n",p-ch+1);
p = strchr(p+1,ch1);
return 0;
追问
while(p)是相当于while(p!=NULL)吗?
追答是
以上是关于解释下面出来的结果,汇编语言知识的主要内容,如果未能解决你的问题,请参考以下文章