我仍然在学习如何使用NASM,因此在我的问题中可能会出现一些语法错误。无论如何,当我创建一个标签,假设如何在NASM汇编器中打印以下内容?
buf: resb 16
然后,标签buf
包含指向第一个被保留了16个字节的内存地址。然后,我想从这些16到最后一个任意字节打印的一切,比如,通过16打印字节13然后代码会看起来像
mov eax, 4
mov ebx, 1
mov ecx, buf + 12
mov edx, 4 ;; for the 4 bytes to be read
int 80h
这是正确的吗?那么,什么我其实想做的是
some_number: resb 1
mov [some_number], byte 3
mov eax, 4
mov ebx, 1
mov ecx, buf + 16 - [some_number]
mov edx, byte [some_number] ;; for the 3 bytes to be read, in this case
int 80h
,所以我想通过地址BUF +(16 - 3),这是BUF + 13.但是,这肯定是行不通的。让我知道这是错误的还是有更好的方法来实现这一点。
顺便说一句,some_number
将由一个任意进程确定,所以它会在每次我的程序运行时不同。
展示你是如何打印?没办法知道这些寄存器否则是正确的。 – TypeIA
对不起,我忘记了包含系统中断。我想写入标准输出。 –