2024年05月09日

AI比較:Z80アセンブリ言語

プロンプト:
Z80のアセンブリ言語で、3を10回足すプログラムを作って下さい。

ChatGPT 3.5による回答
--------

以下は、Z80アセンブリ言語で3を10回足すプログラムの例です。このプログラムは、3をレジスタBに10回ロードし、レジスタAに3を足し続けます。

.org 0000h
start:
LD A, 0 ; レジスタAを0に初期化
LD B, 10 ; レジスタBに10をロード

loop:
ADD A, 3 ; レジスタAに3を足す
DJNZ loop ; レジスタBが0でない場合、ループへ戻る

; ここにプログラムの終了処理を追加する(任意)

HALT ; プログラムの終了

.end

このプログラムは、レジスタAに3を10回足し、その結果をレジスタAに格納します。

--------


Google Geminiによる回答

--------

Code snippet
; Initialize variables
LD A, 03 ; Load value 3 into register
ALD HL, 0000 ; Load value 0000 into HL register (counter)

; Start the loop
loop:
ADD A, A ; Add A to itself (increment A by 1)
DCR HL ; Decrement HL register (count down)
JNZ loop ; Jump to 'loop' if HL is not zero (counter > 0);
End of loop
HALT ; Halt execution

; Output the result
LD B, A ; Load value from A to register
BOUT (0x01), B ; Output value from B to port 0x01 (display on screen)

Explanation:

    1. Initialize variables:

        • LD A, 03: Loads the value 3 into register A.
        • LD HL, 0000: Loads the value 0000 into the HL register, which will be used as a counter.
    1. Start the loop:

        • loop:: This label marks the beginning of the loop.
    1. Increment the sum:

        • ADD A, A: Adds the value in register A to itself, effectively incrementing A by 1.
    1. Decrement the counter:

        • DCR HL: Decrements the value in the HL register by 1.
    1. Check if the loop continues:

        • JNZ loop: Jumps back to the loop label if the value in HL is not zero (counter > 0). This means the loop will continue until the counter reaches zero.
    1. End of the loop:

        • HALT: Halts the execution of the program.
    1. Output the result:

        • LD B, A: Loads the value from register A into register B.
        • OUT (0x01), B: Outputs the value from register B to port 0x01, which is typically connected to a display device. This will display the final sum on the screen.

This code effectively adds the value 3 to itself ten times, storing the result in register A and displaying it on the screen.

--------

Microsoft Copilotによる回答
--------

もちろんです。以下に、Z80アセンブリ言語を使用して3を10回足すプログラムを示します。このプログラムは、レジスタBをカウンタとして使用し、HLレジスタペアに結果を格納します。

Assembly

LD B, 10 ; Bレジスタに10をロード(カウンタとして使用)
LD HL, 0 ; HLレジスタペアを0で初期化
AddLoop:
ADD HL, DE ; DEレジスタペアの値(3)をHLに加算
DJNZ AddLoop ; Bレジスタの値をデクリメントし、ゼロでなければAddLoopに戻る
RET ; プログラム終了

このプログラムを実行する前に、DEレジスタペアに3をロードしておく必要があります。例えば、LD DE, 3のようにしてください。プログラムが終了すると、HLレジスタペアには3が10回加算された結果が格納されています。どうぞお試しください!👩‍💻

--------

Microsoft DesignerによるZ80 CPUの画像
--------

--------

(注釈)
どのAIも大昔のZ80アセンブリ言語を知っていることに、まず感心しました。
その上で、コードをコピーペーストしてマトモに動くのはChatGPT 3.5の回答だけでした。なお、注釈の注意を考慮すれば正しく動くのはMicrosoft Copilotで、ここまでは合格点かと思います。画面への出力を意識しているものの、HLレジスタにくり返し回数ではなく0をロードしているGoogle Geminiは、日本語に対応していないことやDJNZを使っていないことも含めて、もう少し改善の余地があります。

画像のCPUは明らかにZ80ではありませんが、きっとその右上にいるのがZ80なのだと思います。何かのサブコントローラとして働いているのかもしれません。
posted by くまのおっさん at 07:00| Comment(0) | TrackBack(0) | AIに書かせてみた | 更新情報をチェックする