我在汇编中有这个任务来做一些游戏,对于这个游戏,我需要从数组中获取两个数字并将其设为一个数字,就像我有2, 3
我需要进行它{{1} }, 我该怎么做?我真的不知道如何提供更多信息,如果你能告诉我如何帮助你,我将很高兴。
从注释我可以看到程序集可以保存字符串变量,我不知道该怎么做但我想它会容易得多,数组中的项是int值(我认为),这里是游戏代码:
23
这是数组的一部分:
IDEAL
MODEL small
STACK 100h
DATASEG
CODESEG
Clock equ es:6Ch ;Memory location of timer
ran db 0
user_choice db 0
computerscore db 0
userscore db 0
userw db 'you win',10,13,'$'
computerw db 'you lose',10,13,'$'
message db 5 dup (?)
lengthi dw ?
firstMsg db 'Enter the maximum number that the computer can draw (the max is 2 digits):',10,13,'$'
MACRO Random_Generator maxval
mov ax,40h
mov es,ax
mov ax,[Clock]
mov ah,[byte cs:bx]
xor al,ah
xor ah,ah
and al,maxval
endm Random_Generator
proc lineBreak
MOV dl, 10
MOV ah, 02h
INT 21h
MOV dl, 13
MOV ah, 02h
INT 21h
ret
endp lineBreak
start:
mov ax, @data
mov ds, ax
;;;;;;;;;;;;;;;;;;;;;;
push seg firstMsg
pop ds
mov dx, offset firstMsg
mov ah, 9h
int 21h
mov dx, offset message
mov bx, dx
mov [byte ptr bx], 3
mov ah, 0Ah
int 21h
call lineBreak
Random_Generator 9
mov [ran],al
mov ah,1
int 21h
sub al,30h
;mov [user_choice],al
mov ah,[ran]
cmp ah,al
jne computerpoint
inc [userscore]
mov dl,'*'
mov ah,2
int 21h
cmp [userscore],1
jb start
je userwin
computerpoint:
inc [computerscore]
cmp [computerscore],1
jb start
je computerwin
userwin:
call lineBreak
push seg userw
pop ds
mov dx, offset userw
mov ah, 9h
int 21h
jmp exit
computerwin:
call lineBreak
push seg computerw
pop ds
mov dx, offset computerw
mov ah, 9h
int 21h
exit:
mov ax, 4c00h
int 21h
END start
如果重要,我需要用户的数字可以说明计算机可以绘制的最大数量
答案 0 :(得分:0)
mov dx, offset message mov bx, dx mov [byte ptr bx], 3 mov ah, 0Ah int 21h
如果目的是允许用户输入1位数字或2位数字,则将缓冲区大小限制为3就可以了。
需要做的是检查是否收到了数字和收到了多少位数。您将在[bx + 1]
的第二个字节中找到此计数。
Input:
mov dx, offset message
mov bx, dx
mov byte ptr [bx], 3
mov ah, 0Ah
int 21h
mov ax, [bx + 2] ;Optimistically reading 2 digits
sub ax, "00" ;Optimistically going from text to number
cmp byte ptr [bx + 1], 1 ;This byte could be 0, 1, or 2
jb Input ;Redo
je OneDigit
TwoDigits:
xchg al, ah ;Put tens in AH, put ones in AL
aad ;Does AH * 10 + AL
OneDigit:
您的最大号码现在位于AL
。