Макросы и процедуры - Assembler
Формулировка задачи:
1)Можно ли использовать макрос в процедуре?
2)Как вызвать процедуру, не используя команду call?
3)Что может означать строка len1 equ $-s1-3 в программе ниже
4)Объясните назначение команды mov bp,sp в программе ниже
;program to test sorting OUTSTR MACRO str push ax mov ah,09h lea dx,str int 21h pop ax ENDM model small .stack 100h .data s1 db 'cabde',10,13,'$' len1 equ $-s1-3 s2 db 'k1u4afdp5ce2bo6sg3wqr8tyiljh7zx9vnm',10,13,'$' len2 equ $-s2-3 .code ;ПРОЦЕДУРА СОРТИРОВКИ. В bx адрес строки, в dx длина строки sort1 proc push ax ;сохранить ax push cx ;сохранить cx mov cx,dx ;cx=len dec cx; ;cx=len-1 xor si,si ;i=0 I: mov di,si ;цикл по i inc di ;j=i+1 push cx ;подготовка к циклу по j mov cx,dx ;cx=len sub cx,di J: mov al,[bx+si] ;цикл по j cmp al,[bx+di] jb B ;s[i]<s[j]? mov ah,[bx+di] ;not mov [bx+si],ah ;s[i]=s[j] mov [bx+di],al ;s[j]=tmp B: ;yes inc di ;j++ loop J inc si pop cx loop I pop cx ;восстановить первоначальное cx pop ax ;восстановить первоначальное ax ret sort1 endp start: mov ax,@data mov ds,ax OUTSTR s1 lea bx,s1 mov dx,len1 call sort1 OUTSTR s1 OUTSTR s2 lea bx,s2 mov dx,len2 call sort1 OUTSTR s2 ; mov ax,4c00h ;стандартный выход int 21h end start
model small .stack 100h include numout.inc .data x db 9 y db 7 r dw ? .code alg proc push bp mov bp,sp mov al,3 mul byte ptr [bp+4] mov dx,ax mov al,2 mul byte ptr [bp+6] add dx,ax mov sp,bp pop bp ret 4 ;очистка 4-х байт стека alg endp ; begin: mov ax,@data mov ds,ax push word ptr y push word ptr x call alg mov r,dx numout r,0,3 mov ax,4c00h ;стандартный выход int 21h end begin
Решение задачи: «Макросы и процедуры»
textual
Листинг программы
s1 db 'cabde',10,13,'$' len1 equ $-s1-3
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д