2015-03-31 2 views
0
.model small 

.stack 200h 

.data 

string1 db 'wahab $' 

.code 

main proc 

    mov ax,@data 
    mov ds,ax 
    mov ax,0b800h 

    mov es,ax 

    mov ax,offset string1 
    mov si,ax 
    mov di,0 

    l1: 

    mov ax,[si] 

    mov es:[di],ax 
    inc si 
    inc di 

    cmp ax,'$' 
    jne l1   

    main endp 

только три персонажа отображения на карте памяти экрана или видео?Почему в памяти записано только три слова? ассемблере

+0

Символы в вашей строке - это один ** байт ** каждый. Размер регистра 'ax' - это одно ** слово ** (2 байта). Используйте регистр соответствующего размера, например 'al'. – Michael

ответ

1

Видеопамять выровнена по слову. Даже байт является характерным для отображения, нечетным байтом является атрибут цвета. Таким образом, когда вы делаете mov [es:di], ax в сегмент видеопамяти, AL содержит символ, который будет отображаться, и AH - цвет этого символа.

l1: 

mov al,[si] 

mov es:[di],al 
inc si 
add di, 2 

cmp al,'$' 
jne l1 
+0

thanmks alaxandar –