在 Assembly 中索引数组元素
我在使用 NASM 中的数组时遇到了一些问题。我正在尝试实现此伪代码,但得到的结果不正确。 例如,当我将 'abcdefgh' 作为 byte_arr 发送时,我应该得到 8 7 6 5 4 3 2 1。但是,我实际上收到:5 4 3 2 1 1 1 1。这是代码: maxLyn(Z[0 . . n − 1], n, k) : returns integer if k = n − 1 ... »
我在使用 NASM 中的数组时遇到了一些问题。我正在尝试实现此伪代码,但得到的结果不正确。 例如,当我将 'abcdefgh' 作为 byte_arr 发送时,我应该得到 8 7 6 5 4 3 2 1。但是,我实际上收到:5 4 3 2 1 1 1 1。这是代码: maxLyn(Z[0 . . n − 1], n, k) : returns integer if k = n − 1 ... »
我正在使用 nasm 在裸机 16 位实模式程序集上编写程序。我想休眠(暂停执行)x 毫秒,但我还没有找到方法。 编辑:这是我的代码。我想在每个字符输入到屏幕之间添加大约 0.3 秒的延迟。 [bits 16] ; use 16 bits [org 0x7c00] ; sets the start address init: mov si, msg ; loads the addr... »
这是 16 位,实模式,NASM。 ; ---- variables ------ cursorRow db 1 . . . ; what are the differences between these two pushes? push cursorRow ; is this the address of? push [cursorRow] ; is this th... »
我有一个函数foo 用汇编语言编写,并在 64 位 Linux (Ubuntu) 上使用 yasm 和 GCC 编译。它只是使用puts() 将消息打印到标准输出,如下所示: bits 64 extern puts global foo section .data message: db 'foo() called', 0 section .text foo: push rbp... »
我正在尝试使用CMake 编译nasm 源文件,并且对后缀有一些误解。默认情况下CMAKE_ASM_NASM_SOURCE_FILE_EXTENSIONS 的值是nasm;asm,所以我希望*.S 被CMake 识别为ASM_NASM 文件。设置 set(CMAKE_ASM_NASM_SOURCE_FILE_EXTENSIONS "${CMAKE_ASM_NASM_SOURCE_FILE_EXT... »
所以我最近再次转到 nasm 并尝试构建一些基本的东西(putc 和 puts)。 Putc 工作正常,但问题是在我在puts 中调用putc 后,putc 中的ret 不会返回到由puts 推入堆栈的ip 等等puts 中不再执行指令(在 gdb 中调试了该部分)。 msg db "Welcome!", 0ah, 0dh, 0h putc: push ebp mov esp, ... »
非常简单的带有 nasm 的 Hello World。我成功地将它与nasm.exe main.asm -f win32 -o main.obj 组装在一起并将其与gcc.exe -fno-use-linker-plugin -o main.obj output.exe 链接起来 它运行正常,它在屏幕上打印,然后程序崩溃(output.exe has stopped working)。似乎我在堆栈... »
我知道printf 返回EAX 中打印的字符数。为什么printf 将寄存器 ECX 更改为 0?我的代码sn-p: push eax push intFormat call printf add esp,8 我在 64 位 Linux 发行版上运行我的代码。 ... »
如何将mov [ebx], al 从 NASM 转换为 GAS? 我试过mov %al, (%ebx),但它确实出现了段错误。 另一个问题,假设我在 GAS 中有一个数组 .lcomm array, 50 我是否必须像这样在array 中输入美元($)符号:mov %rbx, $array 还是不需要? 任何答案都会有所帮助:) ... »
这是将 2 和 3 相乘的代码的一部分: section .text global _start _start: mov al,'3' sub al, '0' mov bl, '2' sub bl, '0' mul bl add al, '0' ;first question -> mov [res], al mov ecx,msg mov edx, len mov ebx,1 ;fil... »
我无法解决这个问题。 我使用本教程作为参考,使用 NASM for X86 开发了一个引导加载程序: http://fisnikhasani.com/building-your-own-bootloader/ 使用命令: nasm -f bin boot.asm -o boot.bin 我能够在 USB 密钥上运行名为 boot.bin 的引导加载程序。 不过,我还使用名为 pacma... »
我编写了简单的引导加载程序,基于:http://www.viralpatel.net/taj/tutorial/hello_world_bootloader.php [BITS 16] ;16bit [ORG 0x7C00] ;offset MOV AH, 0x00 ; change video mode MOV AL, 0x13 ; 0x13 INT 0x10 ; interrup... »
我正在学习汇编,当然我正在尝试经典的 0x10 BIOS 中断。我查看的资源显示使用lodsb 打印字符串,因此为了理解我试图模仿它的行为的操作码。这适用于lodsb,但不适用于我所拥有的。我做错了什么?: 开始: mov ah, 0Eh ;用于bios中断 mov si, text_string ; 将源索引设置为 text_string 的开头 。重复: ;我试图... »
我正在尝试制作一个打印“Hello!”的简单汇编程序。一次,等待一秒钟,然后再次打印。由于 sleep 函数在汇编中相对复杂,而且我不太擅长,所以我决定使用 C++ 来制作 Sleep 子例程。这是 C++ 程序: // Sleep.cpp #include <thread> #include <chrono> void Sleep(int TimeMs) { ... »
您好,我正在尝试使用此代码在 DOS 视频模式下清除屏幕。 但是当我运行它时,点仍然存在! org 100h mov ah, 0 ; set display mode function. mov al, 13h ; mode 13h = 640x480 pixels, 256 colors. int 10h ... »
我正在编写《操作系统从 0 到 1》一书中的一些操作系统教程。其中一项练习是将光标设置到引导加载程序中屏幕上的某个位置。但是,无论我尝试什么,光标都只停留在左上角的相同位置。 为了让事情更混乱,书中提到我需要在引发中断 10h 之前设置的寄存器是 Y 坐标的 bh 和 X 坐标的 bl。维基百科提到 bh 表示页码,dh 和 dl 表示行和列。这两种方法都不适合我。 这是我正在使用的函数(使用 b... »
我的循环有问题,其中包含的代码很长,它给我错误“短跳超出范围”,所以我想知道是否有办法通过不减少来使循环工作里面的代码量? 例子1: label: my code LOOP label ;它工作正常,但是当我在其中添加更多代码时 例子2: label: my code more code added LOOP label ;它不起作用并出现错误“short... »
大家好,我正在尝试在 x86 中组装河内塔,但我正在尝试使用数组。所以这段代码从用户那里获取一个数字作为 Linux 中的参数,然后错误检查一堆东西。所以现在我只想制作使用我制作的三个数组(开始,结束,临时)的算法并逐步输出它们。如果有人可以提供帮助,将不胜感激。 ` %include "asm_io.inc" segment .data ... »
我正在尝试调试我正在使用 gdb 编写的 x86 引导加载程序。由于 gdb 似乎不能很好地处理 16 位实模式,因此我正在使用其他人为此目的编写的 gdb script。 我尝试调试的代码的最小示例如下所示(文件asm/boot.asm): bits 16 global _start _start: ; zero DS xor ax, ax mov ds, ax ; TOD... »
给定以下代码: L1 db "word", 0 mov al, [L1] mov eax, L1 括号 ([L1]) 代表什么? ... »