x86

    3热度

    1回答

    我想抓住FreeBSD中的汇编程序。在handbook's code example for a UNIX filter中,寄存器esp会在每次系统调用后重置。有问题的代码是: %include 'system.inc' section .data hex db 'ABCDEF' buffer db 0, 0, ' ' section .text global _start _st

    2热度

    1回答

    这个例子是写在NASM: section .bss var28: resb 28 section .text _main: ; Initialize finit fldpi ; Read Tag Word fstenv [var28] mov ax, [var28 + 8] ; move t

    0热度

    1回答

    我想检查宏命令中是否有参数,如果没有参数,请不要执行我的宏代码。在FASM,它看起来像: F MACRO arg1 if ~ arg eq mov ax, arg1 add ax,ax add ax, 5 end if ENDM 但组装此代码返回一个错误: (19) illegal instruction: if ~ arg eq or wrong parameters. 我如何重

    10热度

    1回答

    我写了这个代码在NASM: PADDD mm0, mm1 ,这是组装没有错误,但该指令,但它在NASM存在,我无法在英特尔的说明手册发现,所有我发现是这样的: PADDD xmm1, xmm2/m128 这需要一个xmm寄存器,而不是mm寄存器。 这是PADDD mm0, mm1操作码:0FFEC1 这是PADDD xmm0, xmm1操作码:660FFEC1 那么,为什么PADDD mm

    1热度

    2回答

    假设我有一个时间戳记计数器。 static uint32_t _Atomic timestamp = 0U; static inline uint32_t get_ts(void) { return atomic_fetch_add_explicit(×tamp, 1, memory_order_acquire); } 假设我有一些并发代码,我想通过实验测试和记录内

    4热度

    2回答

    我无法理解什么是汇编的以下行做: 0x401810: repz cmps BYTE PTR ds:[rsi],BYTE PTR es:[rdi] 0x401812: seta dl 0x401815: setb al 调试后,我明白,第一个指令比较寄存器rsi和rdi,逐字节的字节数。 然后根据该指令设置rdx和rax的低位字节。 我的疑惑是,当我在线查阅这个指令时,它说seta如果它的上

    -2热度

    2回答

    为什么我的汇编代码跳过一行?它让跳过线mov AX,A org 100h count equ 2 A DW 5 B DW 6 Y0 DW ? Y1 DW ? mov AX,A add AX,B sub AX,count mov Y0,AX mov BX,B neg BX add BX,count mov Y1,BX ret

    1热度

    1回答

    我目前正在研究x86汇编语言,遵循Kip Irvine的汇编语言书。 在这本书中,作者指出: 3.4.4定义字节为sbyte数据 字节(定义字节),并为sbyte(定义符号字节)指令的一个或多个存储分配 无符号或有符号的值。每个初始化器必须装入存储器的8位。 我只是想知道,如果我不小心分配了一个过大的存储区域值?我应该期待什么样的行为? 由于我缺乏经验,我无法想出一个演示行为的例子,所以如果任何人

    1热度

    1回答

    我试图将数组复制到另一个数组,但元素的顺序应该颠倒并显示。我的程序文件编译但不运行,并且每次都会导致Windows停止错误(Windows对话框)。 我不知道我在做什么错。请指教。 INCLUDE Irvine32.inc .data sarray DWORD 500h, 400h, 300h, 200h, 100h darray DWORD 5 DUP(?) .code main

    0热度

    1回答

    我有数据段 dataseg segment para 'data' var1 db 3 var2 db 5 dataseg ends 我试图移动值,即 mov ax, offset var2 mov bx, [ax] 但它不工作