assembly - 为什么在下面的汇编代码中 sys_write 会打印两次?
问题描述
下面的代码是将内存中的两个数字相加,在数据段中定义,但结果在内存中没有特定值。因此,在 sum 过程结束时,代码首先调用 sys_write 来打印消息,然后再次使用 sys_write 打印结果。但在终端我得到了这个:
La suma es
1234567890
1098765432
2333333322
2333333322
�U
代码是:
section .data
sum_msg: db "La suma es", 10
num1: db "1234567890",10
num2: db "1098765432",10
sum: db " ", 10
lenmsg: equ $-sum_msg
lensum: equ $-num1
section .text
global _start
_start:
mov esi, 9
mov ecx, 10
clc
add_loop:
mov al, [num1+esi]
adc al, [num2+esi]
aaa
pushf
or al, 30h
popf
mov [sum+esi], al
dec esi
loop add_loop
mov ecx, sum_msg
mov edx, lenmsg
mov ebx, 1
mov eax, 4
int 0x80 ; call kernel
mov ecx, sum
mov edx, lensum
mov ebx, 1
mov eax, 4
int 0x80 ; call kernel
mov eax, 1
int 0x80
谢谢,我希望有人能帮助我理解为什么会这样。
解决方案
小丑是正确的。详细地说,$ 是当前位置。您声明 lenmsg 和 lensum 的方式相当于:
lenmsg:等于 lenmsg-sum_msg
lensum: equ lensum-num1
我本来希望第二个 sys_write 从 num1 打印到 sum 的末尾加上 lenmsg 解释为字符(即您提供的输出的最后一行。)
推荐阅读
- python - AttributeError:“NoneType”对象没有属性“get_text”。BeautifulSoup 对象失败
- arrays - 如何找到最简洁的升序子数组
- mongodb - 查找区域内的地理点
- c++ - 将指向列表中元素的指针插入映射会导致垃圾值
- python - python浮点运算的不同答案
- firebase - 有没有办法在 Firestore 中查询为空或包含特定值的数组的字段?
- r - 如何检查一个df中的所有记录是否都包含在另一个df中
- php - 使 PHP 数组很好地显示
- google-sheets - 更新 Google 表格中的值的下拉列表
- java - 如何获取所有联系人并导出到 .vcf 文件?