Tasm: не работает программа - Assembler
Формулировка задачи:
Почему не работает программа?
ideal model small stack 512 MACRO M_Exit mov ah, 04Ch int 21h ; Виклик переривання DOS, ENDM M_Exit MACRO M_Init mov ax, @data mov ds, ax ; ds <- ax mov es, ax ; es <- ax ENDM M_Init DATASEG ar_ans DW 0h, 0h, 0h, 0h ;Оголошення двовим?рного масиву DW 0h, 0h, 0h, 0h DW 0h, 0h, 0h, 0h DW 0h, 0h, 0h, 0h CODESEG Start: M_Init ;?н?ц?ал?зац?я елемент?в масиву, пряма адресац?я mov ax, 0cdcdh ; mov [ds:[0]], ax ; Сегмент даних починається з масиву ar_ans mov [ds:[2]], ax ; Записуємо у нульовий елемент значення 0cdcdh mov [ds:[4]], ax ; Зб?льшуючи значення ефективної адреси,записуємо ?нш? елементи mov [ds:[6]], ax ; mov [ds:[8]], ax ; mov [10], ax ; mov [12], ax ; mov [14], ax ; mov [16], ax ; mov ax, [ds:[0]] ; Сегмент даних починається з масиву ar_ans ; Записуємо ar_ans[0][0] до ах push ax ;Заносимо зм?ст ar_ans[0][0] до стеку через ах mov ax, [ds:[2]] ; Розм?р елементу слово, отже робимо зсув на 2, ; Записуємо ar_ans[0][1] до ах push ax ; Записуємо до стеку зм?ст ar_ans[0][1] через ах. mov ax, [ds:[4]] ; Аналог?чно розм?щаємо вс? елементи до стеку. push ax mov ax, [ds:[6]] push ax mov ax, [ds:[8]] push ax mov ax, [ds:[10]] push ax mov ax, [ds:[12]] push ax mov ax, [ds:[14]] push ax mov ax, [ds:[16]] push ax mov bp, 001FEh mov ax, 0FACEh ; Записуємо значення яким будемо ?н?ц?ал?зувати стек mov cx, 00000h ; Обнуляємо СХ mov [bp], cx ; Обнуляємо д?лянку стеку [ss]:[bx] mov [bp], ax ; Записуємо у д?лянку стеку за адресою [ss]:[bx] ; значення 0FACEh ;Базово-?ндексна адресац?я mov bp, 001F0h ; Записуємо ефективну адресу ; вершини стеку mov si, 4 ; Записуємо номер потр?бного елементу стеку mov cx, [BP+SI+2] ; Зчитуємо номер потр?бного елементу до рег?стру СХ END Start
Решение задачи: «Tasm: не работает программа»
textual
Листинг программы
mov ah, 4Ch int 21h
Объяснение кода листинга программы
ah- это регистр ввода/вывода, который содержит код функции, которую нужно выполнить4Ch- это значение, которое помещается в регистрah, и означает функцию 4Ch (найти и открыть файл)int 21h- это команда, которая выполняет функцию, указанную в регистреah, и возвращает в программу управление после выполнения функции- В данном случае, функция 4Ch должна открыть файл, указанный в регистре
dxилиsi, но в данном коде эти регистры не используются - Если файл не найден или не может быть открыт, функция 4Ch возвращает код ошибки, который можно проверить с помощью условного оператора
- В данном коде нет проверки на ошибки, поэтому если функция 4Ch не может выполнить запрос, программа продолжит работу с неправильными данными, что может привести к непредсказуемым результатам