gpt4 book ai didi

使用 C 和汇编程序计算整数的符号

转载 作者:行者123 更新时间:2023-12-05 01:29:45 24 4
gpt4 key购买 nike

这是我的任务:

对于其中的每一个问题,您都必须编写包含三个部分的 C(而非 C++)程序:

一个。一些用于读取输入的 C 代码(使用 scanf)。

B.一段内联汇编程序来进行计算。

C.一些 C 代码来编写输出(使用 printf)。

  1. sign.c :读取单个整数,使用汇编程序计算其符号(-1、0 或 1),并输出符号。您将需要操作码 jge 和 je。

我能够做第一个问题(添加 2 个整数,使用相同的 3 个准则),但现在我被这个问题难住了。

我能够使这个特定问题的第一部分正常工作(比较 eax 和 0,然后跳转到 DoIF),但是当我取消对其他部分的注释时,计算就一团糟了。

提前感谢您的帮助。非常感谢。

    #include "stdafx.h"


int v; //integer to be read
int sign; //sign

int main()
{
printf("Enter an integer to compute its sign.\n");
scanf_s("%d", &v); // this is how you read an int from the user

//sign = -(v < 0); //C version
__asm // tell MS Visual studio to start a block of assembler
{

mov eax, v // load x into A
cmp eax, 0 // compare A with value 0
je DoIF // if comparison was = 0, jmp to DoIF
mov eax, 100
mov sign, eax
jmp done

//mov eax, v; // load x into A
//cmp eax, 1; // compare A with value 1
//jge OtherIF; // if comparison was = 0, jmp to DoIF2
//mov eax, 2;
//mov sign, eax;
//jmp done;

//mov eax, v; // load x into A
//cmp eax, -1; // compare A with value 1
//jle NextIF; // if comparison was <= 0, jmp to DoIF3
//mov eax, 100;
//mov sign, eax;
//jmp done;

DoIF:
mov eax, 0; // do y = 1
mov sign, eax;

/*OtherIF:
mov eax, 1;
mov sign, eax;*/

/*NextIF:
mov eax, -1;
mov sign, eax;*/

done:
}

最佳答案

使用 jl (少跳)或jge (jump greater equal),如果比较结果小于0就得跳转:

int v; //integer to be read
int sign; //sign

printf("Enter an integer to compute its sign.\n");
scanf_s("%d", &v);

__asm
{
mov eax, v // load x into A
cmp eax, 0 // compare A with value 0
je equal0 // if comparison was == 0 then jmp to equal0
jge greater0 // if comparison was >= 0 then jmp to greater0
mov eax, -1 // set eax to -1
mov sign, eax // sign = -1
jmp done
equal0:
mov eax, 0 // set eax to 0
mov sign, eax // sign = 0
jmp done
greater0:
mov eax, 1; // set eax to 1
mov sign, eax // sign = 1
done:
}

printf("signe of %d is %d.\n", v, sign );

关于使用 C 和汇编程序计算整数的符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34835900/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com