Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Низкоуровневое программирование > 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,185
Репутация: 1014
По умолчанию

Цитата:
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


09:05.


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

RusProfile.ru


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