1. Цель работы Практическое овладение навыками составления простейших программ на языке Ассемблера и работы с программами TASM и TLINK. 2. Листинг программы hello_1 Файл: hello_1.asm ;Program Hello_1 - Ваша первая программа Data SEGMENT Greet DB 'Hello, My friends!',13,10,'$' Data ENDS Ourstack SEGMENT Stack DB 100h DUP(?) Ourstack ENDS ASSUME CS:Code,DS:Data,SS:Ourstack Code SEGMENT Start: mov AX,Data mov DS,AX mov AH,09h mov DX,OFFSET Greet int 21h mov AL,0 mov AH,4Ch int 21h Code ENDS END Start ;Открыть сегмент данных ;Определить строку ;символов с именем Greet ;Закрыть сегмент данных ;Открыть сегмент стека ;Отвести под стек 256 байт ;Закрыть сегмент стека ;Назначить сегментные ;регистры ;Открыть сегмент кодов ;Инициализировать ;сегментный регистр DS ;Вывести строку Greet ;на экран с помощью ;DOS ;Завершить программу ;с помощью ;DOS ;Закрыть сегмент кодов ;Конец иходного модуля Файл: HELLO_1.OBJ 800d 000b 6865 6c6c 6f5f 312e 4153 4db5 8820 0000 001c 5475 7262 6f20 4173 7365 6d62 6c65 7220 2056 6572 7369 6f6e 2033 2e31 9a88 1300 40e9 b204 2456 0b68 656c 6c6f 5f31 2e41 534d 4e88 0300 40e9 4c96 0200 0068 8803 0040 a194 9606 0004 4441 5441 4698 0700 6015 0002 0101 e896 0a00 084f 5552 5354 4143 4bec 9807 0074 0001 0301 01e7 9606 0004 434f 4445 4598 0700 6012 0004 0101 e988 0400 40a2 0191 8805 0040 ea04 0045 8808 0040 e318 0006 002a 0588 0900 40e3 1900 0000 2400 0f88 0900 40e3 1a00 0000 2401 0d88 0b00 40e3 1b00 0000 2300 0000 0c88 0b00 40e3 1c00 0000 2300 0400 0788 0b00 40e3 1d00 0000 2300 0100 0988 0b00 40e3 1e00 0000 2300 0500 0488 0900 40e3 1f00 1200 1a08 f988 1400 40e8 000b 6865 6c6c 6f5f 312e 4153 4db2 0424 564e 9423 0000 030d 0000 000e 0003 000f 0005 0010 0007 0011 000a 0012 000c 0013 000e 0014 0010 007f 880f 0040 e605 4752 4545 541f 0000 0100 00a7 880f 0040 e605 5354 4152 5419 0000 0300 0094 a019 0001 0000 4865 6c6c 6f2c 204d 7920 6672 6965 6e64 7321 0d0a 24d9 a016 0003 0000 b800 008e d8b4 09ba 0000 cd21 b000 b44c cd21 269c 0900 c801 5401 c408 5401 1c8a 0700 c100 0303 0000 a8 Файл: HELLO_1.LST Turbo Assembler Version 3.1 01/04/23 00:37:42 Page 1 hello_1.ASM ;Program Hello_1 - Ваша первая программа 3 0000 Data SEGMENT ;Открыть сегмент 4 данных 1 2 5 0000 48 65 6C 6C 6F 2C ;Определить строку 20+ Greet DB 'Hello, My friends!',13,10,'$' 6 4D 79 20 66 72 69 65+ 7 6E 64 73 21 0D 0A 24 8 ;символов с 9 + именем Greet + 10 0015 ;Закрыть сегмент + Data ENDS данных 11 12 0000 сегмент стека Ourstack SEGMENT Stack 13 0000 0100*(??) ;Отвести под стек 256 + DB 100h DUP(?) байт 14 15 0100 сегмент ;Открыть ;Закрыть Ourstack ENDS + стека 16 17 ;Назначить сегментные ASSUME CS:Code,DS:Data,SS:Ourstack 18 ;регистры 19 0000 сегмент ;Открыть Code SEGMENT + 20 кодов 21 0000 B8 0000s ;Инициализировать Start: mov AX,Data 22 0003 8E D8 ;сегментный + 23 mov DS,AX регистр DS 24 0005 B4 09 ;Вывести строку + 25 mov AH,09h Greet 26 0007 BA 0000r экран с помощью 27 000A CD 21 int 21h 28 000C B0 00 ;Завершить + 29 ;DOS mov AL,0 программу 30 000E B4 4C ;с помощью mov AH,4Ch 31 0010 CD 21 32 0012 ;Закрыть сегмент + ;на mov DX,OFFSET Greet int 21h Code ENDS ;DOS кодов 33 34 ;Конец иходного + END Start модуля 35 Файл: HELLO_1.MAP Start Stop Length Name Class 00000H 00014H 00015H DATA 00020H 0011FH 00100H OURSTACK 00120H 00131H 00012H CODE Program entry point at 0012:0000 Файл: HELLO_1.EXE d:\SUAI\HELLO_1.EXE on x64 Home Edition Version 10.0 (build 22000) No file version information available Creation Date : 04/01/2023 00:37:43 Last Modif. Date : 04/01/2023 00:37:43 Last Access Date : 04/01/2023 01:09:43 FileSize : 1292 bytes ( 1.262 KB, 0.001 MB ) Рис.1 - Вывод программы HELLO_1.EXE 3. Листинг программы hello_2 Файл: hello_2.asm ;Program Hello_2 - Ваша вторая программа Data SEGMENT Greet DB 'Hello, My friends!',13,10,'$' Greet2 DB 'My group IST-41',13,10,'$' Data ENDS Ourstack SEGMENT Stack DB 100h DUP(?) Ourstack ENDS ASSUME CS:Code,DS:Data,SS:Ourstack Code SEGMENT Start: mov AX,Data mov DS,AX mov AH,09h mov DX,OFFSET Greet int 21h mov AH,09h mov DX,OFFSET Greet2 int 21h mov AL,0 mov AH,4Ch int 21h Code ENDS END Start ;Открыть сегмент данных ;Определить строку ;символов с именем Greet ;и именем Greet2 ;Закрыть сегмент данных ;Открыть сегмент стека ;Отвести под стек 256 байт ;Закрыть сегмент стека ;Назначить сегментные ;регистры ;Открыть сегмент кодов ;Инициализировать ;сегментный регистр DS ;Вывести строку Greet ;на экран с помощью ;DOS ;Вывести строку Greet2 ;на экран с помощью ;DOS ;Завершить программу ;с помощью ;DOS ;Закрыть сегмент кодов ;Конец иходного модуля Файл: HELLO_2.OBJ 800d 000b 6865 6c6c 6f5f 322e 4153 4db4 8820 0000 001c 5475 7262 6f20 4173 7365 6d62 6c65 7220 2056 6572 7369 6f6e 2033 2e31 9a88 1300 40e9 8805 2456 0b68 656c 6c6f 5f32 2e41 534d 7688 0300 40e9 4c96 0200 0068 8803 0040 a194 9606 0004 4441 5441 4698 0700 6027 0002 0101 d696 0a00 084f 5552 5354 4143 4bec 9807 0074 0001 0301 01e7 9606 0004 434f 4445 4598 0700 6019 0004 0101 e288 0400 40a2 0191 8805 0040 ea04 0045 8808 0040 e318 0006 002a 0588 0900 40e3 1900 0000 2400 0f88 0900 40e3 1a00 0000 2401 0d88 0b00 40e3 1b00 0000 2300 0000 0c88 0b00 40e3 1c00 0000 2300 0400 0788 0b00 40e3 1d00 0000 2300 0100 0988 0b00 40e3 1e00 0000 2300 0500 0488 0900 40e3 1f00 1200 1a08 f988 0900 40e3 2000 0f00 1a08 fb88 1400 40e8 000b 6865 6c6c 6f5f 322e 4153 4d88 0524 5676 942f 0000 030e 0000 000f 0003 0010 0005 0011 0007 0012 000a 0013 000c 0014 000e 0015 0011 0016 0013 0017 0015 0018 0017 00e6 880f 0040 e605 4752 4545 541f 0000 0100 00a7 8810 0040 e606 4752 4545 5432 2000 0001 1500 5d88 0f00 40e6 0553 5441 5254 1900 0003 0000 94a0 2b00 0100 0048 656c 6c6f 2c20 4d79 2066 7269 656e 6473 210d 0a24 4d79 2067 726f 7570 2049 5354 2d34 310d 0a24 d7a0 1d00 0300 00b8 0000 8ed8 b409 ba00 00cd 21b4 09ba 1500 cd21 b000 b44c cd21 a59c 0d00 c801 5401 c408 5401 c40f 5401 f08a 0700 c100 0303 0000 a8 Файл: HELLO_2.LST Turbo Assembler Version 3.1 01/04/23 00:44:26 Page 1 hello_2.ASM 1 ;Program Hello_2 - Ваша вторая программа 2 3 0000 ;Открыть сегмент 4 Data SEGMENT + данных 5 0000 48 65 6C 6C 6F 2C ;Определить строку 20+ Greet DB 'Hello, My friends!',13,10,'$' 6 4D 79 20 66 72 69 65+ 7 6E 64 73 21 0D 0A 24 8 0015 4D 79 20 67 72 6F ;символов с именем Greet 9 70 20 49 53 54 2D 10 31 0D 0A 24 75+ Greet2 DB 'My group IST-41',13,10,'$' 34+ 11 ;и именем Greet2 12 0027 ;Закрыть сегмент + Data ENDS данных 13 14 0000 ;Открыть сегмент стека Ourstack SEGMENT Stack 15 0000 0100*(??) ;Отвести под стек 256 + DB 100h DUP(?) байт 16 17 0100 ;Закрыть сегмент Ourstack ENDS + стека 18 19 ;Назначить сегментные ASSUME CS:Code,DS:Data,SS:Ourstack 20 ;регистры 21 0000 ;Открыть сегмент Code SEGMENT + кодов 22 23 0000 B8 0000s ;Инициализировать 24 0003 8E D8 ;сегментный mov DS,AX + регистр DS 25 26 Start: mov AX,Data 0005 B4 09 ;Вывести строку + 27 28 0007 BA 0000r ;на экран с помощью mov AH,09h Greet mov DX,OFFSET Greet 29 000A CD 21 30 000C B4 09 ;Вывести строку + int 21h ;DOS mov AH,09h 31 Greet2 32 000E BA 0015r ;на экран с помощью 33 mov DX,OFFSET Greet2 0011 CD 21 int 21h 34 0013 B0 00 ;Завершить + ;DOS mov AL,0 программу 35 36 0015 B4 4C ;с помощью 37 0017 CD 21 38 0019 ;Закрыть сегмент + mov AH,4Ch int 21h Code ENDS кодов 39 40 ;Конец иходного + END Start модуля 41 Файл: HELLO_2.MAP Start Stop Length Name Class 00000H 00026H 00027H DATA 00030H 0012FH 00100H OURSTACK 00130H 00148H 00019H CODE Program entry point at 0013:0000 Файл: HELLO_2.EXE d:\SUAI\HELLO_2.EXE on x64 Home Edition Version 10.0 (build 22000) No file version information available Creation Date : 04/01/2023 00:44:27 Last Modif. Date : 04/01/2023 00:44:27 Last Access Date : 04/01/2023 01:23:39 FileSize : 1344 bytes ( 1.313 KB, 0.001 MB ) ;DOS Рис.2 - Вывод программы HELLO_2.EXE 4. Листинг созданного командного файла *.bat Файл: run.bat tasm/z/zi/n %1 %1 %1 tlink/v %1