Ребят, помогите разобраться. Ввожу в строчку fam фамилию, например "Быков" (без кавычек). Хочу затереть пробелом оставшийся в строке #13. Он стоит на 7 позиции, т. е. fam+7 его адрес. Имя самой строки sf. Её размер rf.
| Код | .model small .stack 100h .code start: mov ax,DGROUP mov ds,ax ; помещается в DS mov es,ax
mov ah,0 mov al,3 int 10h
mov dl,5 ;ввод фамилии mov dh,5 call pk mov dx,offset fam mov ah,0ah int 21h
;затираем mov [fam+7],' '; тут проблема
mov al,fam+7;печатаем 8 или 7 бит mov ah,0 call decas;процедура перевода числа в строку- смотрим код символа
mov dl,1 mov dh,18 call pk lea dx,asc+2 mov ah,9 int 21h
mov ah,08h int 21h mov ax,4C00h int 21h
pk proc ;dh,dl mov ah,2 mov bh,0 int 10h ret pk endp decas proc ; ax,10 mov cx,10 lea si,s-1 mov [si+1],' ' mov [si+2],' ' mov [si+3],' ' mov [si+4],' ' mov bx,5 b: cmp ax,10 jb e mov dx,0 div cx or dl,30h mov [si+bx],dl dec bx jmp b e: or al,30h mov [si+bx],al ret decas endp .data s2 db "Введите вашу фамилию:$" s1 db "Введите ваш номер:$" s3 db "Пароль не верен$" s4 db "Пароль верен$" pas label byte mp db 2 rp db ? sp db 2 dup (' '),'$' fam label byte mf db 11 rf db ? sf db 10 dup (' '),'$' asc label byte m db 10 r db ? s db 10 dup (' '),'$' zap dw 5 mn dw 1 vch dw 0 hand dw ? cod db 10 dup (' ') cod2 db 10 dup (' '),'$' adr db "d.txt",0 buf db 10 dup (' '),'$' bufr1 dw ? bufr2 dw ? bufr3 dw ? seed dw ? srand db 10 dup (' '),'$' pass db 10 dup (' '),'$' end start
|
Так вот, если я пишу mov [fam+7],' ' - то всё нормально. А если:
| Код | lea si,fam add si,7 mov [si],' '
|
или
| Код | lea bx,sf mov al,rf mov ah,0 mov si,ax mov [bx+si],' '
|
ещё как-нибудь. То 8 бите оказывается 0... Откуда он там берётся? |