assembly - 在 x86 程序集中将数组传输到寄存器时出现问题
问题描述
我能够组装,但是当我逐步使用 gdb 时,当我尝试将数组中的值移动到寄存器时它会崩溃
我正在组装nasm -f elf32 test.asm
并且我正在与ld -m elf_i386 test.o
section data
list:
dw 7, 9, 3, 0
section text
global _start
_start:
push ebp ; prologue
mov ebp, esp ; prologue
mov edx, 1 ; i = 1
mov ecx, [edx * 4 + list] ; ecx = list[i]
loop:
mov ebx, [edx * 4 + list]
cmp ebx,0 ; if (list[i] = 0)
jz end ; exit loop
cmp ecx,ebx ; ecx - list[i]
jl if_greater ; ecx - list[i] = <0
inc edx ; i++
jmp loop
if_greater: ; if condition block
mov ecx, [edx * 4 + list] ; new highest value
inc edx ; i++
jmp loop
end:
mov esp, ebp ; epilogue
pop ebp ; epilogue
我添加了更新的代码。我留下了原始代码。我现在的目标是找到列表中最高的一对,但没有成功。
section data
list:
dw 7, 9, 3, 0
section text
global _start
_start:
push ebp ; prologue
mov ebp, esp ; prologue
mov edx, 1 ; i = 1
mov ecx, [edx * 4 + list] ; ecx = list[i]
loop:
mov ebx, [edx * 4 + list]
cmp ebx,0 ; if (list[i] = 0)
jz end ; exit loop
cmp ecx,ebx ; ecx - list[i]
jl if_greater ; ecx - list[i] = <0
inc edx ; i++
jmp loop
if_greater: ; if condition block
mov ecx, [edx * 4 + list] ; new highest value
inc edx ; i++
jmp loop
end:
mov eax, 1
xor ebx, ebx
int 0x80
mov esp, ebp ; epilogue
pop ebp ; epilogue
更新2:我已经删除了序言和尾声。我也改成edx
0
section data
list:
dd 7, 9, 3, 0
section text
global _start
_start:
mov edx, 0 ; i = 0
mov ecx, [edx * 4 + list] ; ecx = list[i]
loop:
mov ebx, [edx * 4 + list]
cmp ebx,0 ; if (list[i] = 0)
jz end ; exit loop
cmp ecx,ebx ; ecx - list[i]
jl if_greater ; ecx - list[i] = <0
inc edx ; i++
jmp loop
if_greater: ; if condition block
mov ecx, [edx * 4 + list] ; new highest value
inc edx ; i++
jmp loop
end:
mov eax, 1
xor ebx, ebx
int 0x80
解决方案
推荐阅读
- python - 我怎样才能提高我的 CNN 的准确度演变?
- ios - CIImage 显示 MTKView vs GLKView 性能
- laravel - 使用 Guzzle 在 Laravel 中使用外部 API 并保存到数据库中
- r - 更改校准图的颜色
- r - 如何在R中绘制日期间隔与事件之间
- python - 并发进程中的 Django select_for_update 函数
- python - 在 python 中从服务器发送一些行到 QT(C++) 客户端
- python - 与 OpenCV 4 和 Python 3.7 连接的一个 USB 上的立体摄像头出现问题
- bash - 如何修复命令后卡住的问题,“bash flash.sh”
- arrays - 数组数组的简单计算