我很幸运地遇到了一些在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)
必须有一个更紧凑的方法来做到这一点.
我有我的数字 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) 我正在编写一个程序,其中的要求如下:
有一个名为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)
我收到错误:

MOV [1234H], AX表示将AX的值复制到内存中的1234十六进制地址.所以,请纠正我,如果我说的是错误的,[]运算符作为指针,对吧?
这就是说,我无法理解以下指令:MOV [EBX], AX为什么使用[]?EBX是处理器内部的通用寄存器,而不是存储器单元,因此没有指针,对吧?
PS我在masm32下编程.
谢谢
这是我的代码..我必须对数组执行选择排序.这是家庭作业.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) 平台:奔腾 4 处理器(我真的需要升级:)运行 Windows XP。我目前正在使用 MASM32 进行组装。
我是汇编的绝对初学者,我正在尝试找出如何添加变量。我了解如何定义变量、将数据放入寄存器以及如何将寄存器放入堆栈,但我不知道如何组合两个变量的值(通过相加)。
另外,谁能给我一个关于 x86 汇编的易于理解的教程的链接或其他内容,到目前为止我发现的所有教程都是非常高级的东西,而且它们没有解释太多。那将非常感激。
预先感谢,Progrmr
只是想知道,关于我的内置宏的替代方案,是否可以通过使用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
我在设置600 ecx对rep 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汇编中有几个关于内存和寄存器的问题:
我有一个字符串"abcdefgh",寄存器%eax保存一个指向字符串的指针.现在我movl (%eax), %edx用来抓取字符串的前四个字节%edx.它们如何存储在寄存器中?是字符d在%dl寄存器中,还是字符a?
movb %eax, %dl例如,当使用它的哪个%eax字节实际上移动了?一个%al或一个?甚至可以这样做吗?或者我应该使用这样的指针 - movb (%eax), %dh- 取指针指向的第一个字节?
最近几天,我试图制作一个引导程序,这是结果:
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)