Assembly DOSBOX如何将MASM代码转换为NASM?
我正试图编写代码,将打印一个5乘5的星号网格,但我被迫使用DOS。我作业的第一部分是在MASM中汇编代码,第二部分是将MASM代码翻译成NASM。有人能帮我把MASM代码翻译成NASM吗 MASM代码:Assembly DOSBOX如何将MASM代码转换为NASM?,assembly,nasm,masm,dosbox,Assembly,Nasm,Masm,Dosbox,我正试图编写代码,将打印一个5乘5的星号网格,但我被迫使用DOS。我作业的第一部分是在MASM中汇编代码,第二部分是将MASM代码翻译成NASM。有人能帮我把MASM代码翻译成NASM吗 MASM代码: .model small .stack 100h .data Asterisks DB '*****',0DH,0AH,'$' .code Main Proc mov ax, @data mov ds, ax mov cx, 5 _loop1:
.model small
.stack 100h
.data
Asterisks DB '*****',0DH,0AH,'$'
.code
Main Proc
mov ax, @data
mov ds, ax
mov cx, 5
_loop1:
mov ah, 9
lea dx, Asterisks
int 21H
dec cx
jnz _loop1
mov ah, 4ch
int 21h
Main ENDP
END Main
我将您的MASM代码保存到文件“sonicM.asm”中,
使用Microsoft(R)宏汇编程序版本6.11c进行汇编
ml.exe/c sonicM.asm
或使用Borland Turbo汇编程序4.0版
tasm.exe sonicM.asm
与Borland Turbo Link 3.01版链接
tlink.exe sonicM.obj
并使用DOSBox版本0.74-2执行
sonicM.exe
; .model small ; €ASM uses pseudoinstruction PROGRAM to specify format, model, entry.
sonicE PROGRAM Format=MZ, Model=small, Entry=Main:
[.stack] SEGMENT ; €ASM requires segment name in the label field in brackets.
DB 100h*BYTE
[.data] SEGMENT ; €ASM requires segment name in the label field in brackets.
Asterisks DB '*****',0DH,0AH,'$'
[.code] SEGMENT ; €ASM requires segment name in the label field in brackets.
Main: Proc
mov ax, PARA# [.data] ; Paragraph address of the segment bottom is available as PARA# [segment]
mov ds, ax
mov cx, 5
_loop1:
mov ah, 9
lea dx, [Asterisks] ; €ASM requires references to memory variables in square brackets.
int 21H
dec cx
jnz _loop1
mov ah, 4ch
int 21h
; Main ENDP ; ENDblocks in €ASM may have their name in the operand field.
ENDP Main
; END Main ; PROGRAM in €ASM requires the corresponding ENDPROGRAM.
ENDPROGRAM sonicE
汇编程序之间的大部分差异体现在伪指令和指令上。
您可以在学习NASM指令 以下源已另存为“sonicN.asm” 这就是您的源代码(另存为“sonicE.asm”)在EuroAssembler中的外观,
已组装并与欧元ASM版本20191104链接
eurosam.exe sonicE.asm
并使用DOSBox版本0.74-2执行
sonicE.exe
; .model small ; €ASM uses pseudoinstruction PROGRAM to specify format, model, entry.
sonicE PROGRAM Format=MZ, Model=small, Entry=Main:
[.stack] SEGMENT ; €ASM requires segment name in the label field in brackets.
DB 100h*BYTE
[.data] SEGMENT ; €ASM requires segment name in the label field in brackets.
Asterisks DB '*****',0DH,0AH,'$'
[.code] SEGMENT ; €ASM requires segment name in the label field in brackets.
Main: Proc
mov ax, PARA# [.data] ; Paragraph address of the segment bottom is available as PARA# [segment]
mov ds, ax
mov cx, 5
_loop1:
mov ah, 9
lea dx, [Asterisks] ; €ASM requires references to memory variables in square brackets.
int 21H
dec cx
jnz _loop1
mov ah, 4ch
int 21h
; Main ENDP ; ENDblocks in €ASM may have their name in the operand field.
ENDP Main
; END Main ; PROGRAM in €ASM requires the corresponding ENDPROGRAM.
ENDPROGRAM sonicE
请提出一个比“有人能帮我吗?”更具体的问题。你到底有什么问题?您是否查阅了相应装配工的手册?