私は次のコードを使って数字の入力を促し、同じ数字を1つの文字列に、同じ数字を別の文字列の前の数字とその後継者だが、私が何をするにしても、私はいつも何も返さない。このコードでは、4回に渡ってパス依存の構造が発生するという警告が表示されます。私は何か間違っているのですか?それとも私のDOSエミュレータの問題ですか?DOSから返された値と3つの警告を受け取ることができません
INCLUDE io.h
Cr EQU 0DH ; carriage return
Lf EQU 0AH ; line feed
TheStack SEGMENT STACK
DW 100H DUP (?)
TheStack ENDS
Data SEGMENT
Number1 DW ?
Number2 DW 1
Prompt1 DB 'Please enter an integer of your choice: ', 0
Prompt2 DB Cr, Lf, 'Enter second number: ', 0
String DB 40 DUP (?)
Label1 DB Cr, Lf, 'Your integer is '
Label2 DB Cr, Lf, ' is the sucessor of '
Label3 DB Cr, Lf, 'the predecessor of '
Label4 DB Cr, Lf, 'is '
Diff DB 6 DUP (?)
DB Cr, Lf
Sum1 DB 6 DUP (?)
DB Cr, Lf, 0
Sum2 Db 6 DUP (?)
DB Cr, Lf, 0
Data ENDS
Code SEGMENT
ASSUME Cs:Code, Ds:Data
Start: Mov Ax, SEG Data ; Load Data Segment Number.
Mov Ds, Ax
Prompt: Output Prompt1 ; Prompt for first number.
Inputs String, 40 ; Read the ASCII characters.
AToI String
Mov Ax, Number1
IToA, Number1, Ax
Output Label1
Output Number1 ; Output label and sum.
AToI Number1
Mov Ax, Number1
Sub Ax, Number2 ; Store second number.
IToA Sum1, Bx
output Sum1, Label2, Number1, stop
Sub Ax, Number2 ; subtract second number.
IToA Diff, Ax
IToA Number1
Mov Bx, Number1 ; Load first number in accumulator.
Add Bx, Number2
IToA Diff, Bx
Output Label3 and Diff and Label4 and stop ; Output label and sum.
Quit: Mov Al, 0 ; Put return code of zero in Al.
Mov Ah, 4CH ; Put DOS function call in Ah.
int 21H ; Call DOS
Code ENDS
END Start
私たちが答えることができる質問の形であなたの混乱を述べることに失敗しました。実際のエラーメッセージ、解決するために行ったこと、正確に理解できないことなど、コードが現在何をしているのかを教えてください。 「何か間違っているの?」良いことではありません。 –
さて、私は間違っていたことを実際に考え出しました。どうやら、積み重ねることなく、一度に1つ以上の変数を印刷することはできません。だから、プロンプト1で数字1を印刷したいのではなく、数字1をプロンプト1の下に定義する必要があります。私はまだそれに問題があります。私はプロンプトを出している番号を保存しようとしていますが、今は正しい入力をプリントアウトしていません。私が9を入れると、私の整数は2であると言い、前任者と後継者の両方に対して、それは1と言うでしょう。私は変数を変えたり、物事をどのように保存しているか、 。 –