解释下面出来的结果,汇编语言知识

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

这些指令都是针对8086的,8086是16位宽度,即最大的数字是0FFFFH
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 <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(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)吗?

追答

以上是关于解释下面出来的结果,汇编语言知识的主要内容,如果未能解决你的问题,请参考以下文章

js知识总结

01.python基础知识

C语言的枚举类型知识

——程序语言和语言处理程序知识

自然语言预训练模型知识增强方法综述

JAVA基础知识