Project Assembly - 如何为Project Assembly“学习元音字母”代码添加标记?
Project Assembly -How To Add Mark to Project Assembly " Learning Vowel Letters" code?
这是我的小项目汇编代码,大约"earning Vowel Letters"。
它正在工作,但问题结束时未添加标记。
5个问题,最迟必须加分,但没有加分。
每个正确答案都会加分。
第 1 页:学习
第 2 页:考试
第 3 页:退出
就像这样它工作。
; multi-segment executable file template.
data segment
firstpage db "learning Vowel letters e,o,a,i,u",10,13,"create by:alex",10,13,"1.stady",10,13,"2.exam",10,13,"3.exit" ,10,13,"$"
std1 db "Umbrella ----> an Umbrella" ,10,13,"$"
std2 db "bird ----> a bird ",10,13,"$"
std3 db "Ice cream ----> an Ice cream",10,13," $"
std4 db "car----> a car ",10,13,"$"
std5 db "Orange ---->an Orange",10,13," $"
qone db "desk ____ desk" ,10,13,"a) a",10,13,"b) an",10,13,"$"
qtow db "apple ____apple" ,10,13,"a) a",10,13,"b) an",10,13,"$"
qth db "table ____ table" ,10,13,"a) a",10,13,"b) an",10,13,"$"
qfo db "egg ____ egg" ,10,13,"a) a",10,13,"b) an",10,13,"$"
qfi db "red ____ red" ,10,13,"a) a",10,13,"b) an",10,13,"$"
nl db 0,10,13,"$"
markze db "your mark is :0$"
markone db "your mark is :10$"
marktow db "your mark is :40$"
markth db "your mark is :60$"
markfo db "your mark is :80$"
markfi db "your mark is :100$"
count db 0
ends
stack segment
dw 128 dup(0)
ends
code segment
start:
mov ax, data
mov ds, ax
lea dx, firstpage
mov ah, 9
int 21h
mov ah,7
int 21h
mov dl,al
cmp dl,"1"
je t1
cmp dl,"2"
je t2
cmp dl,"3"
je soof
t1: mov ax,3
int 10h
lea dx,std1
mov ah,9
int 21h
mov ah,7
int 21h
lea dx,std2
mov ah ,9
int 21h
mov ah,7
int 21h
lea dx,std3
mov ah,9
int 21h
mov ah,7
int 21h
lea dx,std4
mov ah,9
int 21h
mov ah,7
int 21h
lea dx,std5
mov ah,9
int 21h
mov ah,7
int 21h
lea dx, firstpage
mov ah, 9
int 21h
mov ah,7
int 21h
t2: mov ax,3
int 10h
lea dx ,qone
mov ah,9
int 21h
lea dx,nl
mov ah,9
int 21h
mov ah,1
int 21h
mov ah,7
int 21h
mov bl,ah
cmp bl,"a"
je c1
cmp bl,"b"
je c0
lea dx ,qtow
mov ah,9
int 21h
lea dx,nl
mov ah,9
int 21h
mov ah,1
int 21h
mov bl,ah
cmp bl,"b"
je c2
cmp bl,"a"
je c0
lea dx ,qth
mov ah,9
int 21h
lea dx,nl
mov ah,9
int 21h
mov ah,1
int 21h
mov bl,ah
cmp bl,"a"
je c3
cmp bl,"b"
je c0
lea dx ,qfo
mov ah,9
int 21h
lea dx,nl
mov ah,9
int 21h
mov ah,1
int 21h
mov bl,ah
cmp bl,"b"
je c4
cmp bl,"a"
je c0
lea dx ,qfi
mov ah,9
int 21h
lea dx,nl
mov ah,9
int 21h
mov ah,1
int 21h
mov bl,ah
cmp bl,"a"
je c5
cmp bl,"b"
je c0
c0:
cmp count,0
je mark0
c1:
cmp count,1
je mark1
c2:
cmp count, 2
je mark2
c3:
cmp count, 3
je mark3
c4:
cmp count,4
je mark4
c5:
cmp count,5
je mark5
mark0:
lea dx,markze
mov ah,9
int 21h
jmp soof
mark1:
lea dx,markone
mov ah,9
int 21h
jmp soof
mark2:
lea dx,marktow
mov ah,9
int 21h
jmp soof
mark3:
lea dx,markth
mov ah,9
int 21h
jmp soof
mark4:
lea dx,markfo
mov ah,9
int 21h
jmp soof
mark5:
lea dx,markfi
mov ah,9
int 21h
jmp soof
soof: mov ax, 4c00h
int 21h
ends
end start
nl db 0,10,13,"$"
我认为来自 My assembly "quiz Multiply" code is not working? 的回答者的意思是您要写:nl db 10,13,"$"
(没有 zero/comma)
为什么这个版本不起作用
输入错误
mov ah,1
int 21h
mov ah,7
int 21h
mov bl,ah
这两个DOS函数都从键盘输入一个字符。函数 01h 使用 echo 和函数 07h 不使用 echo.
这两个函数所做的就是将结果留在 AH
寄存器中,您稍后将其复制到 BL
寄存器。 结果总是只在AL
寄存器中。当然你只需要在这里包含这些功能之一。
mov ah, 01h
int 21h
mov bl, al
程序流程错误。
cmp bl,"a"
je c1
cmp bl,"b"
je c0
lea dx ,qtow
mov ah,9
int 21h
如果用户对第一个问题给出了正确答案 (a),您将跳转到 c1,在那里您尝试奖励分数并终止程序。
如果用户对第一个问题给出了错误的答案 (b),您将跳转到 c0,在那里您尝试奖励(零)分数并终止程序。
只有当用户提供非法输入时,您才会向他们提出第二个问题。
明显逻辑有问题!
你应该做的是在每次给出正确答案时递增 count 变量。在代码中,这意味着如果未给出正确答案绕过 inc
指令。
...
mov ah, 01h
int 21h
cmp al, "a" ; Correct answer to 1st question
jne Q2 ; was not given
inc count
Q2:
lea dx, qtow
mov ah, 09h
int 21h
mov ah, 01h
int 21h
cmp al, "b" ; Correct answer to 2nd question
jne Q3 ; was not given
inc count
Q3:
lea dx, qth
mov ah, 09h
int 21h
...
处理最后一个问题的第五个部分可以在将在屏幕上打印标记的代码中通过。
...
Q5:
lea dx, qfi
mov ah, 09h
int 21h
mov ah, 01h
int 21h
cmp al, "a" ; Correct answer to 5th question
jne c0 ; was not given
inc count
c0:
...
这是我的小项目汇编代码,大约"earning Vowel Letters"。 它正在工作,但问题结束时未添加标记。 5个问题,最迟必须加分,但没有加分。 每个正确答案都会加分。
第 1 页:学习
第 2 页:考试
第 3 页:退出
就像这样它工作。
; multi-segment executable file template.
data segment
firstpage db "learning Vowel letters e,o,a,i,u",10,13,"create by:alex",10,13,"1.stady",10,13,"2.exam",10,13,"3.exit" ,10,13,"$"
std1 db "Umbrella ----> an Umbrella" ,10,13,"$"
std2 db "bird ----> a bird ",10,13,"$"
std3 db "Ice cream ----> an Ice cream",10,13," $"
std4 db "car----> a car ",10,13,"$"
std5 db "Orange ---->an Orange",10,13," $"
qone db "desk ____ desk" ,10,13,"a) a",10,13,"b) an",10,13,"$"
qtow db "apple ____apple" ,10,13,"a) a",10,13,"b) an",10,13,"$"
qth db "table ____ table" ,10,13,"a) a",10,13,"b) an",10,13,"$"
qfo db "egg ____ egg" ,10,13,"a) a",10,13,"b) an",10,13,"$"
qfi db "red ____ red" ,10,13,"a) a",10,13,"b) an",10,13,"$"
nl db 0,10,13,"$"
markze db "your mark is :0$"
markone db "your mark is :10$"
marktow db "your mark is :40$"
markth db "your mark is :60$"
markfo db "your mark is :80$"
markfi db "your mark is :100$"
count db 0
ends
stack segment
dw 128 dup(0)
ends
code segment
start:
mov ax, data
mov ds, ax
lea dx, firstpage
mov ah, 9
int 21h
mov ah,7
int 21h
mov dl,al
cmp dl,"1"
je t1
cmp dl,"2"
je t2
cmp dl,"3"
je soof
t1: mov ax,3
int 10h
lea dx,std1
mov ah,9
int 21h
mov ah,7
int 21h
lea dx,std2
mov ah ,9
int 21h
mov ah,7
int 21h
lea dx,std3
mov ah,9
int 21h
mov ah,7
int 21h
lea dx,std4
mov ah,9
int 21h
mov ah,7
int 21h
lea dx,std5
mov ah,9
int 21h
mov ah,7
int 21h
lea dx, firstpage
mov ah, 9
int 21h
mov ah,7
int 21h
t2: mov ax,3
int 10h
lea dx ,qone
mov ah,9
int 21h
lea dx,nl
mov ah,9
int 21h
mov ah,1
int 21h
mov ah,7
int 21h
mov bl,ah
cmp bl,"a"
je c1
cmp bl,"b"
je c0
lea dx ,qtow
mov ah,9
int 21h
lea dx,nl
mov ah,9
int 21h
mov ah,1
int 21h
mov bl,ah
cmp bl,"b"
je c2
cmp bl,"a"
je c0
lea dx ,qth
mov ah,9
int 21h
lea dx,nl
mov ah,9
int 21h
mov ah,1
int 21h
mov bl,ah
cmp bl,"a"
je c3
cmp bl,"b"
je c0
lea dx ,qfo
mov ah,9
int 21h
lea dx,nl
mov ah,9
int 21h
mov ah,1
int 21h
mov bl,ah
cmp bl,"b"
je c4
cmp bl,"a"
je c0
lea dx ,qfi
mov ah,9
int 21h
lea dx,nl
mov ah,9
int 21h
mov ah,1
int 21h
mov bl,ah
cmp bl,"a"
je c5
cmp bl,"b"
je c0
c0:
cmp count,0
je mark0
c1:
cmp count,1
je mark1
c2:
cmp count, 2
je mark2
c3:
cmp count, 3
je mark3
c4:
cmp count,4
je mark4
c5:
cmp count,5
je mark5
mark0:
lea dx,markze
mov ah,9
int 21h
jmp soof
mark1:
lea dx,markone
mov ah,9
int 21h
jmp soof
mark2:
lea dx,marktow
mov ah,9
int 21h
jmp soof
mark3:
lea dx,markth
mov ah,9
int 21h
jmp soof
mark4:
lea dx,markfo
mov ah,9
int 21h
jmp soof
mark5:
lea dx,markfi
mov ah,9
int 21h
jmp soof
soof: mov ax, 4c00h
int 21h
ends
end start
nl db 0,10,13,"$"
我认为来自 My assembly "quiz Multiply" code is not working? 的回答者的意思是您要写:nl db 10,13,"$"
(没有 zero/comma)
为什么这个版本不起作用
输入错误
mov ah,1 int 21h mov ah,7 int 21h mov bl,ah
这两个DOS函数都从键盘输入一个字符。函数 01h 使用 echo 和函数 07h 不使用 echo.
这两个函数所做的就是将结果留在 AH
寄存器中,您稍后将其复制到 BL
寄存器。 结果总是只在AL
寄存器中。当然你只需要在这里包含这些功能之一。
mov ah, 01h
int 21h
mov bl, al
程序流程错误。
cmp bl,"a" je c1 cmp bl,"b" je c0 lea dx ,qtow mov ah,9 int 21h
如果用户对第一个问题给出了正确答案 (a),您将跳转到 c1,在那里您尝试奖励分数并终止程序。
如果用户对第一个问题给出了错误的答案 (b),您将跳转到 c0,在那里您尝试奖励(零)分数并终止程序。
只有当用户提供非法输入时,您才会向他们提出第二个问题。
明显逻辑有问题!
你应该做的是在每次给出正确答案时递增 count 变量。在代码中,这意味着如果未给出正确答案绕过 inc
指令。
...
mov ah, 01h
int 21h
cmp al, "a" ; Correct answer to 1st question
jne Q2 ; was not given
inc count
Q2:
lea dx, qtow
mov ah, 09h
int 21h
mov ah, 01h
int 21h
cmp al, "b" ; Correct answer to 2nd question
jne Q3 ; was not given
inc count
Q3:
lea dx, qth
mov ah, 09h
int 21h
...
处理最后一个问题的第五个部分可以在将在屏幕上打印标记的代码中通过。
...
Q5:
lea dx, qfi
mov ah, 09h
int 21h
mov ah, 01h
int 21h
cmp al, "a" ; Correct answer to 5th question
jne c0 ; was not given
inc count
c0:
...