0

アセンブリ言語を学ぼうとしていますが、nasm を搭載した Intel Core i5 win 7 ラップトップで .asm コードを実行するのに何十時間も費やさなければなりません。問題は、ほとんどのアセンブリ コードの本に .Section,.Data が含まれていることです。コンパイルすると、hello world プログラムであっても、常にエラーが発生します。

(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

本はそれ以降の形式でのみ提供されるため、助けてください。

4

2 に答える 2

0

発生するエラーは、異なるアセンブラーが異なる構文を使用するために発生します。最初のプログラムは NASM 形式です。2 つ目は MASM 形式です。

いくつかの例については、asm 構文のウィキペディアを参照してください。ヒントについては、 MASM/NASM の違いとそこに記載されているリンクを参照してください。

于 2013-10-06T20:41:18.217 に答える
0

実は... 2つ目もNasm構文だと思います(!!!)。「io.mac」は故シバラマ・ダンダムディ博士の作品だと思います。私が持っているバージョンは Linux 用 (Windows 7 では動作しない) ですが、これは以前のバージョンのように見えます - おそらく DOS 用です (「スタック」宣言はヒントです - 最近では OS がスタックの場所を教えてくれます)つまり、私たちはそれを伝えません)。Windows 7 は DOS を実行しますか? 最初の例が実行されると、実行されます。そうでない場合は、「DosBox」というエミュレーターを調べてください。

2 番目の例である user2852570 をアセンブル/リンク/実行しようとすると、正確にはどうなりますか? ダンダムディ博士の「io.mac」と「io.o」があれば、もう少し情報を提供できるかもしれません...

于 2013-10-07T00:00:08.970 に答える