Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Гляньте код Assemblera

Модерирует : ShIvADeSt

ShIvADeSt (24-05-2010 03:26): есть тема задачи по асму  Версия для печати • ПодписатьсяДобавить в закладки

   

Steil777

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Написать на ассемблере подпрограмму вывода на вторую строку экрана значения регистра флагов в двоичной системе счисления без использования прерываний DOS и BIOS (прямой записью в видеопамять) для процессора Intel 80x86.
 
mov ax,0B800h
mov es,ax  
mov di,0  
mov es:[di],ax  
std
mov cx,10  
Repeat:
xor dx,dx  
div cx  
xchg ax,dx  
add al,'0'  
stosb  
xchg ax,dx  
or ax,ax  
jne Repeat
 
Объясните кто-нибудь код этой проги и ход её выполнения. И вообще соответствует ли она выше написанному заданию?  

Всего записей: 3 | Зарегистр. 16-05-2010 | Отправлено: 11:03 23-05-2010
necrosy

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
mov ax,0B800h ; в ах пихается сегмент видеопямяти
mov es,ax  ; для того чтобы поместить в es
mov di,0  ; сбросили di (чтобы точка назначения stosb(w) es:di соотвествовала началу буффера)
mov es:[di],ax  ; непонятно зачем сегмент пишется в начало буффера
std ;сбрасываем флаг направления  
mov cx,10  ; сх = 10
Repeat:  
xor dx,dx  ; dx =  0
div cx  ;зачем-то делим dx:ax на сх (dx - остаток, частное ах)
xchg ax,dx  ; меняем местами dx,ax (аx - остаток, частное dх)
add al,'0'  ; складываем остаток с кодом символа '0'
stosb  ; выплевываем содержимое al в видеопамять, увеличиваем di
xchg ax,dx  ; меняем обратно (dx - символ остатока, частное ах)
or ax,ax  ; проверяем закончились ли у нас цифирки )
jne Repeat  
 
вывыд, код заданию не соответствует
1) нету никакого упоминания о регистре флага (напиример pushf/pop ax), надо всталять в самом начале чтобы не похерить его  
2) нужно сдвинуться на вторую строчку (mov di,160 вместо mov di,0), да и вообще надо бы сначала переключить режим в 80х25 через порты vga/vesa
3) вывод в видеопямять должен осуществляться словами (символ,цвет) а не байтами
4) присутствуют некие намеки на вывод 10-ричного числа (а не двоичного как заявлено)

Всего записей: 1 | Зарегистр. 13-05-2009 | Отправлено: 14:33 23-05-2010 | Исправлено: necrosy, 14:35 23-05-2010
Steil777

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
вывыд, код заданию не соответствует  

 а вот этот код:  
.model    tiny
 
color    equ    0bh        
    .code
    org    100h        
start:
    mov    ax,3        
    int    10h        
 
    mov    ax,0B800h    
    mov    es,ax                  
 
    mov    di,4*2        
                 
    std            
    mov    ax,1234    
    call    print        
 
    mov    ah,0        
    int    16h
 
    mov    ax,4c00h    
    int    21h
 
print    proc            
    push    ax cx dx di    
    mov    cx,10        
Repeat:
    xor    dx,dx        
    div    cx        
    xchg    ax,dx        
    add    al,\'0\'        
    mov    ah,color    
    stosw            
    xchg    ax,dx        
    or    ax,ax        
    jne    Repeat        
    pop    di dx cx ax    
    ret
print    endp
    end    start
 
Если он верен, можешь тоже его расписать и если что подправить, буду очень благодарен.

Всего записей: 3 | Зарегистр. 16-05-2010 | Отправлено: 14:46 23-05-2010
   

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Гляньте код Assemblera
ShIvADeSt (24-05-2010 03:26): есть тема задачи по асму


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru