Написать программу перезаписи массива данных (значения элементов массива задаются студентом произвольно) начинающегося с адреса ADR1 и заканчивающегося адресом ADR2 (длина массива указана в задании) в ячейки памяти, начинающиеся с адреса ADR3 и заканчивающиеся адресом ADR4. При перезаписи элементов массива над ними необходимо выполнить операцию, указанную в задании. Результат операций записать в регистр В. Длина массива = 5. ADR1 = 1000. ADR2 = 1004. ADR3 = 1010. ADR4 = 1014. Операция ИСКЛ-ИЛИ-НЕ. Плачу три символических рубля на лолз.
cairs, вот пример программы на языке ассемблера, которая перезаписывает массив данных с использованием операции ИСКЛ-ИЛИ-НЕ и записывает результат в регистр В: ORG 1000h ; начальный адрес массива данных DSEG ; сегмент данных ARRAY DB 1, 2, 3, 4, 5 ; массив данных RESULT DB ? ; результат операции CSEG ; сегмент кода START: MOV SI, ADR1 ; загрузка адреса начала массива данных MOV DI, ADR3 ; загрузка адреса начала ячеек памяти для записи результата MOV CX, LENGTH ; загрузка длины массива данных LOOP_START: MOV AL, [SI] ; загрузка значения элемента массива NOT AL ; инвертирование битов XOR AL, 0Fh ; применение операции ИСКЛ-ИЛИ-НЕ MOV [DI], AL ; запись результата в ячейку памяти INC SI ; переход к следующему элементу массива INC DI ; переход к следующей ячейке памяти для записи результата LOOP LOOP_START ; повторение цикла до конца массива MOV BX, RESULT ; загрузка адреса регистра В MOV AL, [BX] ; загрузка результата операции HLT ; завершение программы ADR1 DW 1000h ; адрес начала массива данных ADR2 DW 1004h ; адрес конца массива данных ADR3 DW 1010h ; адрес начала ячеек памяти для записи результата ADR4 DW 1014h ; адрес конца ячеек памяти для записи результата LENGTH DW 5 ; длина массива данных Код ORG 1000h ; начальный адрес массива данных DSEG ; сегмент данных ARRAY DB 1, 2, 3, 4, 5 ; массив данных RESULT DB ? ; результат операции CSEG ; сегмент кода START: MOV SI, ADR1 ; загрузка адреса начала массива данных MOV DI, ADR3 ; загрузка адреса начала ячеек памяти для записи результата MOV CX, LENGTH ; загрузка длины массива данных LOOP_START: MOV AL, [SI] ; загрузка значения элемента массива NOT AL ; инвертирование битов XOR AL, 0Fh ; применение операции ИСКЛ-ИЛИ-НЕ MOV [DI], AL ; запись результата в ячейку памяти INC SI ; переход к следующему элементу массива INC DI ; переход к следующей ячейке памяти для записи результата LOOP LOOP_START ; повторение цикла до конца массива MOV BX, RESULT ; загрузка адреса регистра В MOV AL, [BX] ; загрузка результата операции HLT ; завершение программы ADR1 DW 1000h ; адрес начала массива данных ADR2 DW 1004h ; адрес конца массива данных ADR3 DW 1010h ; адрес начала ячеек памяти для записи результата ADR4 DW 1014h ; адрес конца ячеек памяти для записи результата LENGTH DW 5 ; длина массива данных Программа загружает адрес начала массива данных в регистр SI, адрес начала ячеек памяти для записи результата в регистр DI и длину массива данных в регистр CX. Затем она перебирает все элементы массива, инвертирует их биты, применяет операцию ИСКЛ-ИЛИ-НЕ и записывает результат в ячейки памяти. Наконец, программа загружает результат операции в регистр В и завершается.
cairs, вот код программы без комментариев: ORG 1000h DSEG ARRAY DB 1, 2, 3, 4, 5 RESULT DB ? CSEG START: MOV SI, ADR1 MOV DI, ADR3 MOV CX, LENGTH LOOP_START: MOV AL, [SI] NOT AL XOR AL, 0Fh MOV [DI], AL INC SI INC DI LOOP LOOP_START MOV BX, RESULT MOV AL, [BX] HLT ADR1 DW 1000h ADR2 DW 1004h ADR3 DW 1010h ADR4 DW 1014h LENGTH DW 5 Код ORG 1000h DSEG ARRAY DB 1, 2, 3, 4, 5 RESULT DB ? CSEG START: MOV SI, ADR1 MOV DI, ADR3 MOV CX, LENGTH LOOP_START: MOV AL, [SI] NOT AL XOR AL, 0Fh MOV [DI], AL INC SI INC DI LOOP LOOP_START MOV BX, RESULT MOV AL, [BX] HLT ADR1 DW 1000h ADR2 DW 1004h ADR3 DW 1010h ADR4 DW 1014h LENGTH DW 5