its*_*ode 4 debugging macos assembly
所以我想知道是否有?我知道afd在windows上但不确定mac有什么用吗?
这就是他如何在以下代码中使用nasam:nasm a.asm -o a.com -l a.lst
[org 0x100]
mov ax, 5
mov bx, 10
add ax, bx
mov bx, 15
add ax, bx
mov ax, 0x4c00
int 0x21
Run Code Online (Sandbox Code Playgroud)
在Windows上我知道一个调试器名称afd,它帮助我逐步完成每个语句,但不知道我如何使用gdb做到这一点.
而且我都无法执行此.com文件,我应该在这里制作一些其他文件吗?
asv*_*kau 11
为什么要编写使DOS系统调用的16位代码?如果您想知道如何编写适用于您的操作系统的asm,请查看gcc -S某些C代码生成的代码...(请注意,以这种方式生成的代码将反转操作数,并且意味着要与as而不是nasm)
此外,你知道这段代码在做什么吗?它像这样读给我:
ax = 5
bx = 10
ax += bx
bx = 15
ax += bx
ax = 0x4c00
int 21h
Run Code Online (Sandbox Code Playgroud)
好像这段代码相当于:
mov bx, 15
mov ax, 4c00
int 21h
Run Code Online (Sandbox Code Playgroud)
根据我在这里看到的,是exit(0).你不需要改变bx......
但.这甚至不适用于你想要做的事情,因为Mac OS X不是MS-DOS,不知道DOS API,无法运行.COM文件等等.我甚至不知道它可以运行16位代码.你会想看看nasm的-f elf选项,你会想要使用寄存器eax而不是ax.
我没有在OS X上进行汇编编程,但理论上你可以这样做:
extern exit
global main
main:
push dword 0
call exit
; This will never get called, but hey...
add esp, 4
xor eax, eax
ret
Run Code Online (Sandbox Code Playgroud)
然后:
nasm -f elf foo.asm -o foo.o
ld -o foo foo.o -lc
Run Code Online (Sandbox Code Playgroud)
当然这依赖于C库,您可能不想这样做.我省略了"完整"版本,因为我不知道Mac上的syscall界面是什么样的.在许多平台上,您的入口点是符号_start,您使用int 80h或进行系统调用sysenter.
至于调试......我也建议使用GDB.您可以通过单个指令前进stepi,并且该info registers命令将转储寄存器状态.该disassemble命令也很有帮助.
更新:记住,我不认为Mac OS X使用ELF ......嗯..我写的大部分内容仍然适用.:-)