我坚持使用此代码.....我想从用户那里获取输入并将其移入寄存器.....但寄存器为16位,输入存储在Al中,为8位...有没有办法将值从AL移动到像BX一样注册...我这样做是因为我想在阵列中使用BX,如数组[bx] ....请帮我这个...
.MODEL SMALL
.STACK 100H
.DATA
MSG DB 10,13,"TIC TAC TOE $"
MSG1 DB " $"
ARR1 DB '1','2','3','4','5','6','7','8','9'
MSG2 DB 10,13,"PLAYER 1 WIN $"
MSG3 DB 10,13,"PLAYER 2 WIN $"
MSG4 DB 10,13,"GAME DRAW $"
VAR DW ?
PLAYER1 EQU 'X'
PLAYER2 EQU 'O'
.CODE
MAIN PROC
MOV AX , @DATA
MOV DS , AX
NEXT_LINE1:
MOV BX , 0 ;counter
NEXT_LINE: ;this loop will shape the array in matrix form
MOV AH , 2
MOV DL , 0AH ; move on next line
INT 21H
MOV DL , 0DH
INT 21H
MOV CX , 3
L1:
MOV AH , 2 ;display content of array
MOV DL , ARR1[BX]
INT 21H
MOV AH , 9
LEA DX , MSG1 ;msg to show space between characters.. like 1 2 3 ,,,, 4 5 6
INT 21H
INC BX
CMP BX , 10
JE ELSE_IF
LOOP L1
JMP NEXT_LINE
ELSE_IF:
MOV BX , 0
;take input from user
MOV AH , 1
INT 21H
SUB AL , 1
ADD BX , AL ;try to save it into register like bx , si , di ...
MOV DX , 'X'
MOV ARR1[BX] , DL
JMP NEXT_LINE1
MOV AH , 4CH
INT 21H
MAIN ENDP
END MAIN
答案 0 :(得分:4)
一些选择:
movzx bx, al ; move with zero-extend
movsx bx, al ; move with sign extend
xor bx, bx ; clear bx
mov bl, al
答案 1 :(得分:1)
正如@michael所说,有一些方法。 (8086集会):
mov bl, al
mov bh, 0
更正确的方法:
cbw ; sign extend al into ax (if it is negative)
mov bx, ax