gpt4 book ai didi

assembly - 如何在 8086 中声明局部变量?

转载 作者:行者123 更新时间:2023-12-02 00:13:05 25 4
gpt4 key购买 nike

如果我在 .data 下声明我的变量,它们被视为全局变量,我如何在本地声明它们

@paul 我可以分配内存,但是我怎么才能对它们进行类型转换(例如有符号和无符号整数)

最佳答案

汇编代码中局部变量的声明取决于您的汇编程序,它可能根本不支持此类声明。

通常,局部变量是通过移动(递减)堆栈指针来分配的。如果使用 push 指令,则可以将堆栈上局部变量的分配和初始化融合在一起,这会推进堆栈指针并写入堆栈。这方面的例子:

; input: eax = some integer >= 1
; output: eax = factorial of the integer
; used registers: ebx, eflags
factorial:
cmp eax, 1
je factorial_end
push eax ; created a local variable on the stack
dec eax
call factorial
pop ebx ; destroyed a local variable on the stack
mul ebx
factorial_end:
ret

至于signed、unsigned和cast,汇编中没有这回事。 CPU 完全按照您的指示进行操作。他们不解释输入或输出,是你,程序员做出这种解释。因此,如果你想将两个无符号整数相除,你可以用整数的值执行 DIV,如果你想进行有符号除法,你可以用 IDIV指令。如果你对你认为是有符号整数的东西使用 IDIV(或对有符号整数使用 DIV),CPU 会很乐意为你做这件事并得到错误的结果(或除法溢出)异常(exception))将是你要处理的问题。幸运的是,无符号整数和 2 的补码有符号整数的加法、减法和乘法由 CPU 以相同的方式对这两种整数完成,您不需要做任何特殊的事情,比如为每种整数选择正确的指令。通常,有符号整数和无符号整数之间只有除法和比较不同。但同样,您在代码中明确处理了这种差异。

关于assembly - 如何在 8086 中声明局部变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14559184/

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