读取BCD中的一对输入坐标,并使用汇编级语言

时间:2015-05-24 15:19:59

标签: assembly x86

这是我的程序

display macro msg
lea dx,msg
mov ah,09h
int 21h
endm

.model small
.data
msg1 db 10h,13h,"Enter row$" 
msg2 db 10h,13h,"Enter Column$"
row db ?
col db ?

.code
mov ax,@data
mov ds,ax

display msg1
call read
mov row,al

display msg2
call read
mov col,al

mov ah,00
mov al,3
int 10h

mov ah,02
mov bh,00
mov dh,row
mov dl,col
int 10h

mov ah,01h
int 21h

mov ah,4ch
int 21h

read proc 

mov ah,01
int 21h
and al,0fh
mov bl,al

mov ah,01
int 21h
and al,0fh

mov ah,bl

MOV CL,4
SHL AH,CL
ADD AL,AH

ret 
read endp

end

所以我知道行和列的位置应该是12和40,以便将它放在屏幕的中心,但是使用这个程序,它的位置不会出现在中心位置。

我认为问题是当我接受输入时,因为当我将行值直接设置为12并且将列值设置为40时将其放入dh并且DL寄存器直接将光标放在中心。

有人能帮帮我吗?感谢

2 个答案:

答案 0 :(得分:2)

mov ah,bl
MOV CL,4
SHL AH,CL
ADD AL,AH
ret

在此代码中,将十分之一乘以 16。您需要乘以10.一种简单的方法是使用aad指令。

mov ah,bl
aad        ;This is AH * 10 + AL
ret

答案 1 :(得分:0)

对于那些没有写过它的人来说,装配中一条未注释的线条往往是一个难以理解的混乱。

让我们一步一步来做:

String serializedResult = JsonConvert.SerializeObject(jsonContactsGroups);