Рубрики

Программа 8086, чтобы перевернуть строку

Проблема: Учитывая строку, мы должны перевернуть строку и напечатать обратную строку.

Примеры:

Input: String : "This is a sample string"
Output: gnirts elpmas a si sihT

Input: String : "Geeks for Geeks"
Output: skeeG rof skeeG 

Объяснение:

  1. Создать строку
  2. Пройдите через строку
  3. Вставьте символы в стек
  4. Подсчитайте количество символов
  5. Загрузить начальный адрес строки
  6. POP верхний символ стека, пока количество не станет равным нулю
  7. Поместите символ и уменьшите количество и увеличьте адрес
  8. Продолжайте, пока счет не станет больше нуля
  9. Загрузите эффективный адрес строки в dx, используя команду LEA
  10. Напечатайте жало, вызывая прерывание с 9H в AH
  11. Строка должна заканчиваться знаком '$'

Программа:

.MODEL SMALL 
.STACK 100H 
.DATA 

  
; The string to be printed 

STRING DB 'This is a sample string', '$'

  
.CODE 
MAIN PROC FAR 
MOV AX,@DATA 
MOV DS,AX 

  
; call reverse function 
CALL REVERSE 

  
; load address of the string 
LEA DX,STRING 

  
; output the string
; loaded in dx 
MOV AH, 09H 

INT 21H 

  

; interrupt to exit

MOV AH, 4CH

INT 21H 

  
MAIN ENDP 
REVERSE PROC

    ; load the offset of

    ; the string 

    MOV SI, OFFSET STRING 

  

    ; count of characters of the; 

    ;string 

    MOV CX, 0H 

  

    LOOP1:

    ; compare if this is; 

    ;the last character 

    MOV AX, [SI] 

    CMP AL, '$'

    JE LABEL1 

  

    ; else push it in the; 

    ;stack 

    PUSH [SI] 

  

    ; increment the pointer; 

    ;and count 

    INC SI 

    INC CX 

  

    JMP LOOP1 

  

    LABEL1:

    ; again load the starting; 

    ;address of the string 

    MOV SI, OFFSET STRING 

  

        LOOP2: 

        ;if count not equal to zero 

        CMP CX,0 

        JE EXIT 

  

        ; pop the top of stack 

        POP DX 

  

        ; make dh, 0 

        XOR DH, DH 

  

        ; put the character of the; 

        ;reversed string 

        MOV [SI], DX 

  

        ; increment si and; 

        ;decrement count 

        INC SI 

        DEC CX 

  

        JMP LOOP2 

  

                  

    EXIT:

    ; add $ to the end of string 

    MOV [SI],'$ '

    RET 

          
REVERSE ENDP 
END MAIN 

Выход:

gnirts elpmas a si sihT

Замечания:
Программа не может быть запущена в онлайн-редакторе, пожалуйста, используйте MASM для запуска программы и используйте поле DOS для запуска MASM, вы можете использовать любой эмулятор 8086 для запуска программы.

Рекомендуемые посты:

Программа 8086, чтобы перевернуть строку

0.00 (0%) 0 votes