【发布时间】:2016-06-19 03:55:24
【问题描述】:
我刚开始学习汇编语言,我们有一个家庭作业,作业的目的是编写一个程序,将表示为字符串的有符号整数转换为 2 的补码编码。
所以我认为我们需要做的一件事是,当我们输入一个像“10”这样的字符串时,我们需要将它分解成“1”和“0”,然后进行转换 2 的补码编码(让我知道如果您认为这是正确的方法)。
所以我做了这个小程序——只是为了提取“10”中的“1”。
以下是代码中的数字的一些 cmets
将字符代码“1”(0x31)移入寄存器
rax。
那是R[rax] <- M[R[rbx]+0] = M[asc] = 0x31。将字符代码“0”(0x30)移动到寄存器
rcx。
那是R[rcx] <- M[R[rbx]+1] = M[asc+1] = 0x30。将字符代码“1”(0x31)移动到
answ。另外,我不太确定%al是做什么的,这是我老师推荐的。
然后在 gdb 中,我在 ret 语句上打了一个断点,例如 break *main+18
然后我输入x/xg $answ
然后我得到一个错误
值不能转换为整数
我不确定如何解决这个问题。谢谢您的帮助。程序是:
.data
asc: .string "10"
answ: .quad
.text
.globl main
main:
mov $asc, %rbx
mov 0(%rbx), %rax #1
mov 1(%rbx), %rcx #2
mov %al, 3(%rbx) #3
ret
【问题讨论】:
-
如果它更容易首先使用汇编以外的语言。例如像 C 或许多其他的。不,这并不意味着使用 strtoul。但是遍历字符串,想出算法,然后一旦你用一种你很自然的语言得到算法,然后用汇编语言简单地编写该算法。
-
如果我不能很快弄清楚,那么我会这样做并发布它。
-
请edit 改进您的问题标题。就像现在一样,它是对您的作业的背诵,而不是问题或问题描述。我的直接反应是投票结束作为您作业的副本/粘贴。您的标题应该描述您遇到的问题或您提出的问题,并且应该是在搜索结果中看到的对未来读者有意义的内容。
-
我改了标题,希望有意义