
Новичок
Профиль
Группа: Участник
Сообщений: 3
Регистрация: 5.8.2006
Репутация: нет Всего: нет
|
Здраствуйте ув. Форумчане! В общем суть такова, была написана 16-битная программа , но преподователь отказался ее принимать, аргументировал тем что она под ДОС, а нужно 32-бит Виндовс МАСМ. Прошу помочь подправить данный код в соответствии с требованиями (32-бит Windows). Код | ; Начало программы org 100h jmp Start
Start proc ; Матрица 1 mov ah, 09h mov dx, offset mbMesX int 21h mov bx, offset mbMatrix1 call FMatrixPrint
call FRet ; Матрица 2 mov ah, 09h mov dx, offset mbMesX int 21h mov bx, offset mbMatrix2 call FMatrixPrint
call FRet ; Вызов процедуры умножения call FMatrixR_Format ; Результирующая матрица mov ah, 09h mov dx, offset mbMesR int 21h mov bx, offset mbMatrixR call FMatrixPrint
call FRet ; ожидаем нажатия на клавишу mov ah, 0 int 16h
ret endp ; Перемножение матриц FMatrixR_Format proc ; сохраняем регистры push ax push bx push cx ; устанавливаем порядковый номер элемента = 0 mov cx, 0 FMatrixR_Format_5: lea bx, mbMatrix1 ; загружаем смещение матрицы 1 add bx, cx ; прибавляем порядковый номер элемента mov dl, [bx] ; загружаем элемент mov ah, 0 lea bx, mbMatrix2 ; загружаем смещение матрицы 2 add bx, cx ; прибавляем порядковый номер элемента mov al, [bx] ; загружаем элемент mul dl ; операция умножения lea bx, mbMatrixR ; загружаем смещение матрицы для результата add bx, cx ; прибавляем порядковый номер элемента mov [bx], al ; сохраняем елемент inc cx ; переходим на след элемент cmp cx, 9 ; проверяем окончание количества элементов в матрице jb FMatrixR_Format_5 ; восстанавливаем регистры pop cx pop bx pop ax ret endp
; Переход на новую строку FRet proc push ax push dx mov ah, 02h mov dl, 0ah ; вниз int 21h mov dl, 0dh ; назад int 21h pop dx pop ax ret endp
; Очистка строки FS3_Space proc push bx push cx ; сохраняем lea bx, mbS3 mov ch, 0 ; устанавливаем количество элементов mov cl, bSizeS3 FS3_Space_5: mov [bx], ' ' ; заполняем массив пробелами inc bx loop FS3_Space_5 pop cx ; восстанавливаем pop bx ret endp
; Вывод строки S3 FS3_Print proc ; сохраняем регистры push ax push dx ; печать строки mov ah, 09h mov dx, offset mbS3 int 21h ; восстанавливаем регистры pop dx pop ax ret endp ; Формирование строки S3 из регистра AL FS3_ALOut proc ; сохраняем все регистры push ax push bx push cx push dx ; очистка поля call FS3_Space ; ограничение на 1 байт чмсла mov ah, 0 lea bx, mbS3 ; сотни cmp al, 100 jb FS3_ALOut_5 mov dl, 100 ; делим на 100 div dl mov [bx], al add [bx], 48 mov al, ah ; устанавливаем остаток как результат mov ah, 0 ; стираем ненужную часть FS3_ALOut_5: ; десятки inc bx cmp al, 10 jb FS3_ALOut_6 mov dl, 10 ; делим на 10 div dl mov [bx], al add [bx], 48 mov al, ah ; устанавливаем остаток как результат FS3_ALOut_6: ; единицы inc bx mov [bx], al add [bx], 48 ; восстанавливаем все регистры pop dx pop cx pop bx pop ax ret endp
; Печать матрицы: BX - начало матрицы FMatrixPrint proc push ax ; сохраняем AX push bx ; сохраняем BX, чтобы не изм. вх. параметр ; первая строка mov al, [bx] ; загрузка начального символа call FS3_ALOut ; формирование числа call FS3_Print ; печать буфера call FS3_Space ; очистка буфера call FS3_Print ; печать буфера inc bx ; переход на след. символ матрицы mov al, [bx] ; загрузка следующего символа call FS3_ALOut ; формирование числа call FS3_Print ; печать буфера call FS3_Space ; очистка буфера call FS3_Print ; печать буфера inc bx ; переход на след. символ матрицы mov al, [bx] call FS3_ALOut ; формирование числа call FS3_Print ; печать буфера inc bx ; переход на след. символ матрицы call FRet ; переход на новую строку ; вторая строка mov al, [bx] call FS3_ALOut ; формирование числа call FS3_Print ; печать буфера call FS3_Space ; очистка буфера call FS3_Print ; печать буфера inc bx ; переход на след. символ матрицы mov al, [bx] call FS3_ALOut ; формирование числа call FS3_Print ; печать буфера call FS3_Space ; очистка буфера call FS3_Print ; печать буфера inc bx ; переход на след. символ матрицы mov al, [bx] call FS3_ALOut ; формирование числа call FS3_Print ; печать буфера inc bx ; переход на след. символ матрицы call FRet ; переход на новую строку ; третья строка mov al, [bx] call FS3_ALOut ; формирование числа call FS3_Print ; печать буфера call FS3_Space ; очистка буфера call FS3_Print ; печать буфера inc bx ; переход на след. символ матрицы mov al, [bx] call FS3_ALOut ; формирование числа call FS3_Print ; печать буфера call FS3_Space ; очистка буфера call FS3_Print ; печать буфера inc bx ; переход на след. символ матрицы mov al, [bx] call FS3_ALOut ; формирование числа call FS3_Print ; печать буфера inc bx ; переход на след. символ матрицы call FRet ; переход на новую строку pop bx ; восстанавливаем BX pop ax ; восстанавливаем AX ret endp
mbMatrix1 db 0, 1, 2, 3, 4, 5, 6, 7, 8 mbMatrix2 db 8, 7, 6, 5, 4, 3, 2, 1, 0 mbMatrixR db 0 dup (0)
mbMesX db "Исходная матрица:", 0Dh, 0Ah, "$" mbMesR db "Результирующая матрица:", 0Dh, 0Ah, "$"
bSizeS3 db 3 mbS3 db '1', '2', '3', '$'
|
Заранее благодарен!
|