Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.
Внимание! Некоторое время письма не доходят до аккаунтов MAIL RU GROUP, не доходят на все почтовые ящики mail.ru, inbox.ru, bk.ru. Пишите им жалобы, чтобы быстрее восстановили получение писем, регистрируйтесь через яндекс почту и gmail, туда письма с активизацией доходят.

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler
Регистрация

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

Ответ
 
Опции темы
Старый 07.05.2015, 20:28   #1
LOSi
 
Регистрация: 07.05.2015
Сообщений: 6
Репутация: 10
По умолчанию Помогите с 13 прерыванием

У меня такая проблема, я написал командную строку с выполнением 2 операций первая операция работает нормально, 2 это вывод 3 сектора памяти у меня при компиляции входит в цикл, если дебажить, то там получается ошибка FF в регистре AX и я не понимаю почему так происходит, данные передаю корректные.




Код:

org 100h
global mainFunc
global main
section .text


main:
call mainFunc
    pop ax
ret

    mainFunc:
        xor si, si
        xor di, di

        call setTextMode
        mov al, 1
        call setPage

        checkCommand:
            mov ax, text3
			push ax
			call strOut

			call strIn

			xor ax, ax
			mov bp, sp
			add bp, si
			sub bp, 2
			mov si, textcom 
			mov ah, [si]
			checkstr:
				add al, [bp]
				sub al, ah
				sub bp, 2
				inc si
				mov ah, [si]
				
				test ah, 0ffh
			jnz checkstr
			sub si,textcom
			inc si
			add ax, 0
			test ax, ax
	    jz mainFunc
	    add bp,12
	    xor ax, ax
	    mov si, textcom2
			mov ah, [si]
			checkstr2:
				add al, [bp]
				sub al, ah
				sub bp, 2
				inc si
				mov ah, [si]
				
				test ah, 0ffh
			jnz checkstr2
			sub si,textcom2
			inc si
			add ax, 0
			test ax, ax
			jz string_5
        jnz checkCommand

    ret




	string_5:
        mov bx,[buf]
        mov ch,1           
        mov cl,03h         
        mov dh,0            
        mov dl,81h          
        mov al,01h         
        mov ah,02h
        int 13h
        mov ax,buf
        mov cx, 10
        push ax
        call strOut
        jnz checkCommand
   ret     


    setCursor:
        mov ah, 2
        int 10h
    ret
    
    setPage:
        mov ah, 5
        mov bh, al
        int 10h
    ret
    
    setTextMode:
        mov ax, 0003h
        int 10h
    ret
    
    charOut:
        mov cx, 1
        mov ah, 9
        int 10h
        inc dl
        call setCursor
    ret
    
    strOut:
        mov bp, sp
        mov bp, [bp+02]
        mov al, [bp]
        mov ah, 3
        int 10h
        mov bl, 2
        string:
            call charOut
            inc bp
            mov al, [bp]
            and al, 0ffh
        jnz string
        inc dh
        xor dl,dl
        call setCursor
        pop ax
        add sp, 2
        push ax
    ret

    
    strIn:
        xor si, si
        mov bp, sp
        mov bp, [bp]

        add sp, 2
        mov bl, 3
        input:
            call inputChar
            cmp ah, 1Ch
        jz exit
            add si, 2
            call charOut
            xor ah, ah
            push ax
        jmp input

        exit:
        add si, 2
        mov ax, 0ffffh
        push ax
        xor dl, dl
        inc dh
        call setCursor
        push bp
    ret
    
    inputChar:
        mov ah, 0
        int 16h
    ret


section .data

text3 db 'Input command',0
textcom db 'reboot',0
textcom2 db 'showfile',0
buf times 512 db 0


Последний раз редактировалось LOSi; 08.05.2015 в 13:22.
LOSi вне форума   Ответить с цитированием
Старый 08.05.2015, 01:00   #2
R71MT
Профессионал
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,230
Репутация: 1048
По умолчанию

Цитата:
LOSi
входит в цикл
..на каком участке кода ошибка-то хоть?
Из-под винды 13-ое прерывание дёргать бесполезно. Нужен чистый дос..
__________________
Нашедшего выход - затаптывают первым..
R71MT на форуме   Ответить с цитированием
Старый 08.05.2015, 12:48   #3
LOSi
 
Регистрация: 07.05.2015
Сообщений: 6
Репутация: 10
По умолчанию

Я запускаю это под qemu, c загрузчика , ошибка возникает при прочтении 3 сектора в ax выводит ошибку FF, если что смешение org 100h стоит тк я запускал в DOSbox и смотрел в турбо дебаггере.

Код:

string_5:
mov bx,[buf]
mov ch,1 
mov cl,03h 
mov dh,0 
mov dl,81h 
mov al,01h 
mov ah,02h
int 13h
mov ax,buf
mov cx, 10
push ax
call strOut
jnz checkCommand
ret


Последний раз редактировалось LOSi; 08.05.2015 в 13:22.
LOSi вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перевод нужен срочно помогите ) в течение 2 часов от Паскаля на Турбо СИ нужно помогите Жанибек Помощь студентам 14 01.04.2015 18:23
ошибка возвращаемойая прерыванием int 10h shturman Assembler 7 01.07.2010 14:04
Помогите создать програму для роботы с файлами, пожалуйста помогите нужно очень срочно Сергей Человек Фриланс 3 06.07.2009 19:30
Помогите Помогите Пожалуйста Решить Одну Задачку в Паскале!!! VisTBacK Помощь студентам 6 19.09.2008 13:44


23:48.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru