1.输入两个数,分别作为有符号和无符号数比较大小,输出较大值,并分别输出差值的绝对值。
int a;
int b;
int max_signed;
unsigned int max_unsigned;
int differ_signed_abs;
unsigned int differ_unsigned_abs;
printf("a = ");
scanf("%d", &a);
printf("b = ");
scanf("%d", &b);
_asm{
MOV EAX, a
MOV EBX, b
MOV max_signed, EAX
SUB EAX, EBX
JG L1
//若a<=b,max值取b,且差值取绝对值
MOV max_signed, EBX
NEG EAX
L1:
MOV differ_signed_abs, EAX
MOV EAX, a
MOV EBX, b
MOV max_unsigned, EAX
SUB EAX, EBX
JA L2
//同上
MOV max_unsigned, EBX
NEG EAX
L2:
MOV differ_unsigned_abs, EAX
}
printf("有符号数比较较大值为:\t%d\n", max_signed);
printf("有符号数比较差的绝对值为:\t%d\n", differ_signed_abs);
printf("无符号数比较较大值为:\t%u\n", max_unsigned);
printf("无符号数比较差的绝对值为:\t%u\n", differ_unsigned_abs);
2.输入四个字符,分别作为两个字和一个双字的数据,作为无符号数输出。
char s[5];
unsigned int dw;
unsigned int w1, w2;
printf("s = ");
scanf("%s", s);
_asm{
LEA EAX, s //获取字符串存储地址
MOV EBX, w1 //获取w1存储地址
MOV ECX, w2 //获取w2存储地址
MOV EAX, 0
MOV AX, DX //取出低16位,即前两个字符
MOV w1, EAX
MOV EAX, 0
SHR EDX, 16 //将原高16位右移至低16位
MOV AX, DX //取出后两个字符
MOV w2, EAX
}
printf("第一个字:\t%u\n第二个字:\t%u\n双字:\t%u\n",w1, w2, dw);
3.获取字符串长度
char s[81];
int len;
printf("s = ");
scanf("%s", s);
_asm{
LEA EAX, s //获取字符串存储地址
MOV ECX, -1 //初始化计数器
L:
ADD ECX, 1
MOV BL, [EAX + ECX] //取出第ECX个字符
CMP BL, 0 //判定是否为'\0'
JNE L
MOV len, ECX
}
printf("字符串的长度为:\t%d\n", len);