Выполнение файлов com и exe. ASM 8086 - Assembler

Узнай цену своей работы

Формулировка задачи:

У меня проблема. Даже в простых программах вычисляющих сумму или разность 2 чисел, записанных в сегменте dana (не вводимых с консоли) я не могу вывести и проверить результат даже имея эмулятор EMU8086. При запуске com как из Windows так и в командной строке окошко захлопывается. Вот код
.model tiny 
.code
org 100h     
.data
        str1 DB 'Press F1! $'
        str2 DB 'You have press F1!$'
        str3 DB 'Sucker!!!$'         
start:
        mov ax,@data
        mov ds,ax
      
  lol:  lea dx,str1
        mov ah,09h
        int 21h
 
        mov ah,01h
        int 21h
        test al,al
        jz lol
 
        cmp al,3Bh
        je yo
        jmp a1
yo:
        lea dx,str2
        mov ah,09h
        int 21h
        xor ah,ah
        int 16h
a1:
        lea dx,str3
        mov ah,09h
        int 21h
        xor ah,ah
        int 16h
exit:
         mov ah,04Ch
         mov al,01h
         int 21h
end start
Сообщения str1,str2,str3 просто не выводятся. Компиляция нормальная

Решение задачи: «Выполнение файлов com и exe. ASM 8086»

textual
Листинг программы
.model tiny 
.code
	org 100h     
start:
        ;mov ax,@data
        ;mov ds,ax
      
  lol:  lea dx,str1
        mov ah,09h
        int 21h
 
        mov ah,01h
        int 21h
        test al,al
        jz lol
 
        cmp al,3Bh
        je yo
        jmp a1
yo:
        lea dx,str2
        mov ah,09h
        int 21h
        xor ah,ah
        int 16h
a1:
        lea dx,str3
        mov ah,09h
        int 21h
        xor ah,ah
        int 16h
exit:
         mov ah,04Ch
         mov al,01h
         int 21h
.data
        str1 DB 'Press F1! $'
        str2 DB 'You have press F1!$'
        str3 DB 'Sucker!!!$'         
end start

Объяснение кода листинга программы

  1. Установка модели памяти на tiny и кодирование на языке ассемблера 8086.
  2. Определение точки входа в программу - метки start.
  3. Загрузка сегмента данных в регистр DS перед выполнением операций с переменными.
  4. Установка цикла, который будет выполняться до тех пор, пока значение переменной al не станет равным 0.
  5. Вывод на экран строки Press F1! с использованием функции 09h.
  6. Проверка значения переменной al на равенство 3Bh (это символ F1 в кодировке MSDOS).
  7. Если условие выполняется, то происходит переход к метке yo.
  8. Если условие не выполняется, то происходит переход к метке a1.
  9. В обоих случаях после выполнения цикла происходит очистка регистра AH и выполнение функции 16h (вывод строки в консоль).
  10. После выполнения всех операций происходит выход из программы с помощью функции 04Ch и передачей в нее значения 01h.
  11. Определение трех строк для вывода на экран в сегменте данных.
  12. Вывод на экран первой строки Press F1! с использованием функции 09h.
  13. Вывод на экран второй строки You have press F1! с использованием функции 09h.
  14. Вывод на экран третьей строки Sucker!!! с использованием функции 09h.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 3.733 из 5