Загрузка данных


Turbo Assembler	 Version 4.1	    09/24/26 14:37:55	    Page 1
Prog_4.asm
LAB2_2 KORNEEV VV


      1				     TITLE LAB2_2 KORNEEV VV
      2
      3	0000			     .model small
      4	0000			     .stack 512
      5
      6	0000			     .data
      7	0000  12		     den DB 18
      8	0001  4321		     qwer DW 4321h
      9	0003  000C		     mes DW 12
     10	0005  0C*(13)		     Mas_1 DB 12 dup(19)
     11	0011  14*(????)		     Mas_2 DW 20 dup(?)
     12	0039  4B 6F 72 6E 65 65	76+  stroka DB 'Korneev', '$'
     13	      24
     14
     15	0041			     .code
     16	0000			     start:
     17				     ; настраиваем сегмент данных
     18	0000  B8 0000s		     mov ax, @data
     19	0003  8E D8		     mov ds, ax	     ; особый случай mov: напрямую в сегментный	    +
     20				     регистр число писать нельзя, только через ax
     21
     22				     ; год в di
     23	0005  BF 07D6		     mov di, 07D6h
     24
     25				     ; грузим переменные в регистры
     26	0008  A0 0000r		     mov al, den
     27	000B  8B 0E 0003r	     mov cx, mes
     28	000F  A1 0003r		     mov ax, mes
     29	0012  8E C0		     mov es, ax	     ; тут тоже особый случай mov: из памяти	в es	    +
     30				     сразу	не закинуть, делаем через регистр
     31
     32				     ; закидываем в стек	den и mes
     33	0014  32 E4		     xor ah, ah	     ; обнуляем	ah, чтобы протолкнуть байт den как   +
     34				     слово	(стек ест только по 16 бит)
     35	0016  A0 0000r		     mov al, den
     36	0019  50		     push ax
     37	001A  A1 0003r		     mov ax, mes
     38	001D  50		     push ax
     39
     40				     ; меняем qwer и mes	местами
     41	001E  A1 0001r		     mov ax, qwer    ; особенность mov: нельзя	гонять данные из	    +
     42				     памяти в память, берем ax как	посредник
     43	0021  87 06 0003r	     xchg ax, mes
     44	0025  A3 0001r		     mov qwer, ax
     45
     46				     ; адрес den в si
     47	0028  BE 0000r		     lea si, den
     48
     49				     ; копируем	ds в es через стек (напрямую mov es, ds нельзя)
     50	002B  1E		     push ds
     51	002C  07		     pop es
     52
     53				     ; достаем из стека в обратном порядке (LIFO)
     54	002D  5A		     pop dx	     ; сюда	падает mes
     55	002E  59		     pop cx	     ; сюда	падает den
     56
     57				     ; вывод фамилии
Turbo Assembler	 Version 4.1	    09/24/26 14:37:55	    Page 2
Prog_4.asm
LAB2_2 KORNEEV VV


     58	002F  B4 09		     mov ah, 09h
     59	0031  BA 0039r		     lea dx, stroka
     60	0034  CD 21		     int 21h
     61
     62				     ; выход в DOS
     63	0036  B8 4C00		     mov ax, 4c00h
     64	0039  CD 21		     int 21h
     65
     66				     end start
Turbo Assembler	 Version 4.1	    09/24/26 14:37:55	    Page 3
Symbol Table
LAB2_2 KORNEEV VV



Symbol Name			  Type	 Value

??DATE				  Text	 "09/24/26"
??FILENAME			  Text	 "Prog_4  "
??TIME				  Text	 "14:37:55"
??VERSION			  Number 040A
@32BIT				  Text	 0
@CODE				  Text	 _TEXT
@CODESIZE			  Text	 0
@CPU				  Text	 0101H
@CURSEG				  Text	 _TEXT
@DATA				  Text	 DGROUP
@DATASIZE			  Text	 0
@FILENAME			  Text	 PROG_4
@INTERFACE			  Text	 000H
@MODEL				  Text	 2
@STACK				  Text	 DGROUP
@WORDSIZE			  Text	 2
DEN				  Byte	 DGROUP:0000
MAS_1				  Byte	 DGROUP:0005
MAS_2				  Word	 DGROUP:0011
MES				  Word	 DGROUP:0003
QWER				  Word	 DGROUP:0001
START				  Near	 _TEXT:0000
STROKA				  Byte	 DGROUP:0039

Groups & Segments		  Bit Size Align  Combine Class

DGROUP				  Group
  STACK				  16  0200 Para	  Stack	  STACK
  _DATA				  16  0041 Word	  Public  DATA
_TEXT				  16  003B Word	  Public  CODE