Обновления в тесте:
1. Улучшено тестирование команды деления (спасибо за замечание Patron'у).
2. Сделано жесткое тестирование команды MARK (на реале не проверено, проверено на эмуляторах УКНЦ - EmuStudio и UKNCBTL).
TSTVM2 v0.3a
Обновления в тесте:
1. Улучшено тестирование команды деления (спасибо за замечание Patron'у).
2. Сделано жесткое тестирование команды MARK (на реале не проверено, проверено на эмуляторах УКНЦ - EmuStudio и UKNCBTL).
TSTVM2 v0.3a
Ассемблер допускает написаниеКод:MOV #^O006400,R0 ; R0 - код команды MARK N(MARK определять не нужно - фича).Код:MOV #MARK,R0
Для тестирования необязательно загонять в стек. Пример использованя команды MARK и так и так (а заодно использования мнемоники вместо кода):А это отвлеченно - пример когда команда MARK работает не так как ожидается:Код:.TY MARK.MAC .TITLE MARK -- ПРИМЕРЫ ИСПОЛЬЗОВАНИЯ MARK .IDENT /V01.00/ .MCALL .EXIT,.PRINT ;+ ;ПРИМЕР БЕЗ ИСПОЛЬЗОВАНИЯ СТЕКА ;- START:: MOV #RSTRT,R5 ;АДРЕС ДЛЯ ПЕРЕХОДА MARK 4 ;ИДЕМ ТУДА, УСТАНАВЛИВАЕМ СТЕК STACK:: .BLKW 4 ;ОБЛАСТЬ СТЕКА .WORD 123456 ;ЗНАЧЕНИЕ ДЛЯ R5 ;+ ;ПОСЛЕ ВЫПОЛНЕНИЯ КОМАНДЫ MARK В R5 БУДЕТ ПОМЕЩЕНО ;123456, А SP БУДЕТ УКАЗЫВАТЬ НА #RSTRT ;- RSTRT:: MOV R5,R1 ;ПЕРЕВОДИМ R5 В ASCII MOV #VR5,R0 ; MOV PC,R2 ; CALL $CBOMG ; MOV #VSP,R0 ;ПЕРЕВОДИМ SP В ASCII MOV SP,R1 ; MOV PC,R2 ; CALL $CBOMG ; MOV #VRS,R0 ;ПЕРЕВОДИМ АДРЕС #RSTRT В ASCII MOV #RSTRT,R1 ;...ДОЛЖЕН БЫТЬ РАВЕН SP MOV PC,R2 ; CALL $CBOMG ; .PRINT #R5VAL ;ПЕЧАТАЕМ ЗНАЧЕНИЯ ;+ ;ПРИМЕР С ИСПОЛЬЗОВАНИЕМ СТЕКА ;- MOV R5,-(SP) ;СОХРАНЯЕМ R5 MOV #1,-(SP) ;ПОМЕЩАЕМ В СТЕК АРГУМЕНТ #1 MOV #2,-(SP) ;...#2 MOV #3,-(SP) ;...#3 MOV #MARK+3,-(SP) ;ПОМЕЩАЕМ В СТЕК КОМАНДУ MARK MOV SP,R5 ;УСТАНАВЛИВАЕМ ЕЕ АДРЕС ДЛЯ RTS CALL SUBR ;ВЫЗЫВАЕМ ПОДПРОГРАММУ MOV #VSP2,R0 ;ПЕРЕВОДИМ SP В ASCII MOV SP,R1 ; MOV PC,R2 ; CALL $CBOMG ; .PRINT #LEAVE ;ПЕЧАТАЕМ СООБЩЕНИЕ ВЫХОДА .EXIT ;ВЫХОД В СИСТЕМУ SUBR: .PRINT #ENTER ;ПЕЧАТАЕМ СООБЩЕНИЕ ВЫХОДА RTS R5 ;ВОЗВРАТ И ВОССТАНОВЛЕНИЕ СТЕКА R5VAL: .ASCII /R5=/ VR5: .ASCII /XXXXXX, SP=/ VSP: .ASCII /XXXXXX, #RSTRT=/ VRS: .ASCIZ /XXXXXX/ ENTER: .ASCIZ /SUBROUTINE ENTERED/ LEAVE: .ASCII /SUBROUTINE LEAVED WITH SP=/ VSP2: .ASCIZ /XXXXXX/ .END START .EX MARK R5=123456, SP=001020, #RSTRT=001020 SUBROUTINE ENTERED SUBROUTINE LEAVED WITH SP=001020 .
Код:.LIN MARK/ID .RU MARK !SPLIT I/D SPACE PROGRAM ?MON-F-Trap to 4 001010 .
Последний раз редактировалось form; 29.10.2014 в 08:16.
PDP-11/83, Электроника МС0511 (УК-НЦ), DECserver 90M
Q-Bus: H9278-A, DLV11-J, DZQ11, DHV11, DELQA-M, LPV11, CQD-420/TM, DRV11
PMI: KDJ11-BF, MSV11-JE
VT220, CM7209
Очень даже приемлимо. Никто не мешает создать буфер "под стек" как в примере и помещать в нужное место команду BR перед тестированием, а то и заполнить его весь командами с таким расчетом чтобы проверять точность перехода
По умолчанию в RT-11 стек устанавливается на 1000 и до 500 (чуть больше чем 500 на самом деле - 476 уже область векторов в RT-11) его безопасно можно понижать.
PDP-11/83, Электроника МС0511 (УК-НЦ), DECserver 90M
Q-Bus: H9278-A, DLV11-J, DZQ11, DHV11, DELQA-M, LPV11, CQD-420/TM, DRV11
PMI: KDJ11-BF, MSV11-JE
VT220, CM7209
PDP-11/83, Электроника МС0511 (УК-НЦ), DECserver 90M
Q-Bus: H9278-A, DLV11-J, DZQ11, DHV11, DELQA-M, LPV11, CQD-420/TM, DRV11
PMI: KDJ11-BF, MSV11-JE
VT220, CM7209
Кстати, судя по вашему примеру, системе при выходе из программы все равно, что вы установили стек в другое место и не вернули его?
PDP-11/83, Электроника МС0511 (УК-НЦ), DECserver 90M
Q-Bus: H9278-A, DLV11-J, DZQ11, DHV11, DELQA-M, LPV11, CQD-420/TM, DRV11
PMI: KDJ11-BF, MSV11-JE
VT220, CM7209
Ничего не будет. Зачем мне в конце программы балласт в виде лишнего буфера? В конце концов тест может вырасти до таких размеров, что не будет умещаться в память (как уже было с тестом скорости). Так что буферами лишними я разбрасываться не хочу.
А ставить буфер на место стека - это фактически то, что я сейчас и делаю, но извращеннее)
Я предложил другой вариант - использовать существующий стек под буфер - это все-равно будет по количеству команд короче чем пример с загонкой в стек
При том можно тест выполнять так, чтобы после выполнения MARK стек оставался на том же месте всегда...
А что касается размера теста - в крайнем случае его можно порезать на оверлеи - зачем все тесты одновременно в пямяти хранить?
---------- Post added at 11:43 ---------- Previous post was at 11:40 ----------
Иными словами - тест MARK без вызова подпрограммы
---------- Post added at 13:04 ---------- Previous post was at 11:43 ----------
Кстати все спросить забываю... Не придумалось ли надежных способов точно идентифицировать ВМ1 и ВМ2 процессор? С ВМ3 все просто...
PDP-11/83, Электроника МС0511 (УК-НЦ), DECserver 90M
Q-Bus: H9278-A, DLV11-J, DZQ11, DHV11, DELQA-M, LPV11, CQD-420/TM, DRV11
PMI: KDJ11-BF, MSV11-JE
VT220, CM7209
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)