Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.12.2008, 20:24   #1
Santilos
Новичок
Джуниор
 
Регистрация: 23.12.2008
Сообщений: 1
По умолчанию Сегмент стека

Народ, помогите решить задачу: требуется вывести из сегмента стека заданное количество байт в шестнадцатеричном виде. Я в ассемблере дуб. Подправьте, пожалуйста, код. Вот мой кривой исходник(написан в TASM)
Код:
 
.model small
.stack 100h
.data
text db 'vvedite colitchestvo bait'
.code
    mov ax,@data              
    mov ds,ax
    mov dx, offset text
mov ah, 9h
int 21h
mov ah, 8h                
    int 21h                    
    cmp al, 0dh                
    jne f1        
    mov si,0               ;установка значения 0 в инд рег
f1:    mov dl,ss:[si]         ;помещаем первый байт сегмента кода в рег dl
 
 
    mov bl,dl              ;поместить значение рег dl  
    mov cx,2               ;установка рег сх значение 2
    push bx                ;положить значение рег bx в стек
    
    shr bl,4                ;сдвиг рег bx на 4 рзряда
srav:
    cmp bl,9               ;сравнить рег bl c 9
    jle cifra              ;если меньше то переход на метку  
    add bl,37h             ; ИНАЧЕ прибавить 55
    mov ah,2               ;поместить в рег ah счисло 2
    mov dl,bl              ;поместить в рег  
    int 21h                ;вызов 21 прерывания
    jmp two                ;переход на метку
cifra:
    add bl,30h             ;прибавить к рег bl 48
    mov ah,2               ;поместить в рег ah число 2
    mov dl,bl              ;поместить в рег dl значение рег bl
    int 21h                ;вызов 21 прерывания  
 
two:
    pop bx                 ;взять значение из стека и поместить в рег bx
    and bl,0fh             ; обнуление 4 битов рег bl
    loop srav              ;переход по метке
    inc si                 ;увеличить si на 1
      
    cmp si,15              ;сравнить рег si c 15
        jne f1                    ; если меньше или равно переход на метку
 
        mov ah,08h            ;ожидание нажатия клавиши
        int 21h
    mov ah,4ch            ;завершение программы
    int 21h
end                           ;конец

Последний раз редактировалось rpy3uH; 23.12.2008 в 21:01.
Santilos вне форума Ответить с цитированием
Старый 24.12.2008, 10:09   #2
airyashov
Форумчанин
 
Регистрация: 02.04.2008
Сообщений: 358
По умолчанию

а что здесь конкретно не работает?
неплохо пишу на ассемблере для 80х86
icq: 3(один)7748666
mail: airyashov(а)inbox.ru
airyashov вне форума Ответить с цитированием
Старый 24.12.2008, 18:47   #3
smileman
Пользователь
 
Аватар для smileman
 
Регистрация: 09.06.2008
Сообщений: 60
По умолчанию

Если я правильно понял задачу,то у тебя белеберда какая-то..
примерно так должно быть:
Код:
.model small
.stack 100h
.data
text db 'vvedite colitchestvo bait$'

.code
    mov ax,@data              
    mov ds,ax
    mov dx, offset text
    mov ah,09h
    int 21h

r1: mov ah,08h                
    int 21h
    cmp al,'0'  ;Если это служебный символ -> r1
    jb r1
    cmp al,'9'  ;Если это не цифра -> r1
    ja r1
          
    xor dx,dx
    mov dl,al
    mov ah,2
    int 21h
    sub dl,30h
    
    mov si,0
                   
    mov cx,dx
f1: mov dl,ss:[si]         
    add dl,'0'
    mov ah,2
    int 21h
    
    inc si
    
    
    loop f1
    
    mov ah,08h
    int 21h
    mov ah,4ch            
    int 21h
end
заданное количество байт выводит,только вот не 16-ричной системе..

Последний раз редактировалось smileman; 24.12.2008 в 18:50.
smileman вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Переполнение Стека Викдон Паскаль, Turbo Pascal, PascalABC.NET 0 19.12.2008 19:16
Ошибка переполнения стека Cannibal Общие вопросы Delphi 1 01.12.2008 21:32
Неправильный вывод данных из стека С++ Cyberex Общие вопросы C/C++ 3 07.05.2008 16:53
Заполнение стека inkvizitor Общие вопросы Delphi 5 08.10.2007 17:01