小编rkh*_*khb的帖子

FASM - 压缩"缓冲区db 0,0,0,0,0,0 ......"

我很幸运地遇到了一些在FASM中编译得很好的NASM代码只改变了一行;

buffer times 64 db 0
Run Code Online (Sandbox Code Playgroud)

这在NASM中工作正常,但在FASM中没有 - 我必须写:

buffer db 0, 0, 0, 0, 0, 0, ...
Run Code Online (Sandbox Code Playgroud)

必须有一个更紧凑的方法来做到这一点.

assembly nasm fasm

2
推荐指数
1
解决办法
973
查看次数

如何将浮点四舍五入到最近的偶数程序集

我有我的数字 1.010101101,数字的类型是 REAL8,我尝试使用默认的舍入方法“四舍五入到最接近的偶数”,我看到了很多例子,它都是关于四舍五入和使用 frndint 但经过大量搜索我意识到这不是默认舍入我是对还是错?

如果是错误的,请您向我解释如何使用 MASM 程序集进行操作??

这是我的代码:

 .686
 .model flat,stdcall
 .stack 4096

 include irvine32.inc
 include macros.inc
 include floatio.inc

 .data
 R REAL8 1.010101101

  .code
  main proc

   finit
   call ShowFPUStack
   fld R
   call ShowFPUStack
   frndint
   call ShowFPUStack

 exit
 main endp
 end main
Run Code Online (Sandbox Code Playgroud)

这是我的 FPU 堆栈

------ FPU Stack ------

------ FPU Stack ------
ST(0): +1.0101011E+000

------ FPU Stack ------
ST(0): +1.0000000E+000
Run Code Online (Sandbox Code Playgroud)

assembly masm rounding fpu irvine32

2
推荐指数
1
解决办法
3054
查看次数

汇编语言 - 将字符与XOR相结合

我正在编写一个程序,其中的要求如下:

有一个名为Name的字符串变量,它设置为您的全名,包括空格.
仅清除AL寄存器,而不是EAX寄存器的其余部分.
循环遍历Name变量中的每个字符.
使用XOR命令组合每个字符.
将最终的XOR结果存储在AL寄存器中.
在程序结束时包含DumpRegs命令.

我一直在努力使这一点正确并且一直试图使用本书中的例子,但是,我只是不断收到错误.这是我有的:

INCLUDE Irvine32.inc


.data

name BYTE "Joe Smith" , 0   ; 
temp BYTE SIZEOF name DUP(0)

.code
main PROC
    mov al,0
    mov esi,0
    mov ecx,SIZEOF name

Combine:
    xor al,name[esi]
    inc esi
    loop Combine

    Call DumpRegs

    exit            ; exit to operating system
main ENDP
END main
Run Code Online (Sandbox Code Playgroud)

我收到错误: 在此输入图像描述

assembly masm xor irvine32

2
推荐指数
1
解决办法
496
查看次数

MOV [EBX],AX - 指向寄存器的指针?

MOV [1234H], AX表示将AX的值复制到内存中的1234十六进制地址.所以,请纠正我,如果我说的是错误的,[]运算符作为指针,对吧?

这就是说,我无法理解以下指令:MOV [EBX], AX为什么使用[]?EBX是处理器内部的通用寄存器,而不是存储器单元,因此没有指针,对吧?

PS我在masm32下编程.

谢谢

assembly masm masm32

1
推荐指数
1
解决办法
630
查看次数

汇编语言中的选择排序

这是我的代码..我必须对数组执行选择排序.这是家庭作业.Irvine32.inc建立了我的记忆模型.对我做错的任何建议都会有所帮助.我现在已经重复了整整几件事.

INCLUDE Irvine32.inc
.data
myArray DWORD 10, 12, 3, 5
.code
main PROC
    call Clrscr
    MOV EDI, OFFSET myArray
    MOV ECX, LENGTHOF myArray
    CALL PRINT_ARRAY


    MOV EDI, OFFSET myArray
    MOV ECX, LENGTHOF myArray
    CALL SORT_ARRAY

    CALL CRLF
    MOV EDI, OFFSET myArray
    MOV ECX, LENGTHOF myArray
    CALL PRINT_ARRAY

    exit
main ENDP
;-----------------------------------------------------------------------------
PRINT_ARRAY PROC
; requires edi to be pointing to an array
; requires ecx to be the length of the array
;-----------------------------------------------------------------------------
ARRAYLOOP: MOV EAX, [EDI]
           CALL WRITEINT
           CALL …
Run Code Online (Sandbox Code Playgroud)

sorting assembly masm irvine32

1
推荐指数
1
解决办法
6980
查看次数

x86汇编,如何添加存储在内存中的变量?

平台:奔腾 4 处理器(我真的需要升级:)运行 Windows XP。我目前正在使用 MASM32 进行组装。

我是汇编的绝对初学者,我正在尝试找出如何添加变量。我了解如何定义变量、将数据放入寄存器以及如何将寄存器放入堆栈,但我不知道如何组合两个变量的值(通过相加)。

另外,谁能给我一个关于 x86 汇编的易于理解的教程的链接或其他内容,到目前为止我发现的所有教程都是非常高级的东西,而且它们没有解释太多。那将非常感激。

预先感谢,Progrmr

x86 assembly masm masm32

1
推荐指数
1
解决办法
1万
查看次数

x86程序集(masm32) - 我可以在windows xp上使用int 21h来打印东西吗?

只是想知道,关于我的内置宏的替代方案,是否可以通过使用int 21h windows API 来避免使用StdOut宏?如:

.data
       msg dd 'This will be displayed'
;original macro usage:
invoke StdOut, addr msg
;what I want to know will work
push msg 
int 21h ; If this does what I think it does, it should print msg
Run Code Online (Sandbox Code Playgroud)

是否存在这样的事情(如使用int 21h打印东西),或者存在类似的东西,但不完全是21h.或者我完全错了.

有人可以为我澄清一下吗?

谢谢,

Progrmr

x86 assembly winapi masm masm32

1
推荐指数
1
解决办法
3615
查看次数

程序集rep movsw移动超过指示

我在设置600 ecxrep movsw,当它excutes它移动616个字节.该特定代码表示.

我错过了什么?

在代码之后,我包括两个Pdumps来显示移动的结果.第一个是原点,第二个是目的地.

            ; This program reads the contents of "E:\RaamSoft\SICBdata\SICBCONS201401.SLD" and
            ; outputs it to a File.

             .486

             include \masm32\include\masm32rt.inc
             include \masm32\include\debug.inc
             includelib \masm32\lib\debug.lib

            ; ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±

            .Const
             RegFecSz   equ 638
             NxtRgFx    equ 82
             MEMORYSIZE equ 65536
            ; This is how much memory we'll allocate for Work Area.

            .Data?
            RetCode   DWord    ?
            hFout     HANDLE   ?
            hFfin     HANDLE   ?
            hMemory   HANDLE   ?
            pMemory   DWord    ?
            ReadSize  DWord    ?
            ; l for Lengths; h for Handle & …
Run Code Online (Sandbox Code Playgroud)

x86 assembly masm masm32

1
推荐指数
1
解决办法
258
查看次数

在X86程序集中访问和移动字节

我在X86汇编中有几个关于内存和寄存器的问题:

  1. 我有一个字符串"abcdefgh",寄存器%eax保存一个指向字符串的指针.现在我movl (%eax), %edx用来抓取字符串的前四个字节%edx.它们如何存储在寄存器中?是字符d%dl寄存器中,还是字符a

  2. movb %eax, %dl例如,当使用它的哪个%eax字节实际上移动了?一个%al或一个?甚至可以这样做吗?或者我应该使用这样的指针 - movb (%eax), %dh- 取指针指向的第一个字节?

string x86 assembly endianness att

1
推荐指数
1
解决办法
3362
查看次数

实模式下的NASM远距离/远距离呼叫和ASM代码约定

最近几天,我试图制作一个引导程序,这是结果:

BITS 16


;CONSTANTS
BOOTSEG     equ 07C0h
STACKSEG    equ 1BC0h ; BOOTSEG + 512 Byte (bootloader) + 512 Byte (second stage) + 4096 Byte (buffer) = 1BC0h
STACKSIZE   equ 0400h ; 1KB stack



; INIT
    mov AX, BOOTSEG     
    mov DS, AX      ; set data segment to adress where bootloader will be loaded to
    mov AX, STACKSEG
    cli         ; disable interrupts while set up stack
    mov SS, AX  
    mov SP, STACKSIZE   ; set up stack
    sti         ; restore interrupts
    mov [bootdev], …
Run Code Online (Sandbox Code Playgroud)

x86 assembly nasm bootloader

0
推荐指数
1
解决办法
5137
查看次数

标签 统计

assembly ×10

masm ×7

x86 ×5

masm32 ×4

irvine32 ×3

nasm ×2

att ×1

bootloader ×1

endianness ×1

fasm ×1

fpu ×1

rounding ×1

sorting ×1

string ×1

winapi ×1

xor ×1