我正在尝试学习汇编语言,但我必须花费十几个小时才能在我的intel核心i5 win 7笔记本电脑上使用nasm运行.asm代码。 问题是大多数汇编代码都有.Section,.Data在它中。当我编译它时总是给出错误,即使它是hello world rogram。
运行程序(nasm)
org 100h
mov dx,string
mov ah,9
int 21h
mov ah,4Ch
int 21h
string db 'Hello, World!',0Dh,0Ah,'$'
使用此格式的程序不运行
%include "io.mac"
.STACK 100H
.DATA
number_prompt db "Please type a number (<11 digits): ",0
out_msg db "The sum of individual digits is: ",0
.UDATA
number resb 11
.CODE
.STARTUP
PutStr number_prompt ; request an input number
GetStr number,11 ; read input number as a string
nwln
mov EBX,number ; EBX = address of number
sub DX,DX ; DX = 0 -- DL keeps the sum
repeat_add:
mov AL,[EBX] ; move the digit to AL
cmp AL,0 ; if it is the NULL character
je done ; sum is done
and AL,0FH ; mask off the upper 4 bits
add DL,AL ; add the digit to sum
inc EBX ; update EBX to point to next digit
jmp repeat_add
done:
PutStr out_msg
PutInt DX ; write sum
nwln
.EXIT
请提供帮助,因为书籍只有以后的格式。
答案 0 :(得分:0)
您遇到的错误是因为不同的汇编程序使用不同的语法。您的第一个程序是NASM格式;第二个是MASM格式。
有关几个示例,请参阅wikipedia on asm syntax,并参阅MASM/NASM Differences及其中提到的链接以获取提示。
答案 1 :(得分:0)
实际上......我认为第二个也是Nasm语法(!!!)。我认为“io.mac”是已故的Sivarama Dandamudi博士的作品。我得到的版本是针对Linux(不能在Windows 7上运行),但这看起来像是早期版本 - 可能是DOS(“堆栈”声明是提示 - 这些天操作系统告诉我们堆栈在哪里是的,我们不告诉它)。 Windows 7是否运行DOS?如果您的第一个示例运行,它会运行。如果没有,请查看名为“DosBox”的模拟器。
当您尝试汇编/链接/运行第二个示例user2852570时,究竟会发生什么?如果您有Dandamudi博士的“io.mac”和“io.o”,我们或许能够为您提供更多信息......