Подскажите куда копать - Assembler

Узнай цену своей работы

Формулировка задачи:

Здравствуйте помогите решить задачу или подскажите решить. суть задачи вывести из массива часто встречаемый элемент. если напишите код буду благодарен))

Решение задачи: «Подскажите куда копать»

textual
Листинг программы
;
.8086
.MODEL TINY
;
Tab         EQU   9
CR          EQU   0Dh
LF          EQU   0Ah
Space       EQU   20h
;
.CODE
      ORG   100h
START:
      LEA   DX, sdInfo
      CALL  DISP_SD
STR_LOOP:
; Input string
      LEA   DX, kbBuf
      MOV   SI, DX
      INC   SI
      MOV   AH, 0Ah
      INT   21h
      CALL  DISP_CRLF
      XOR   CH, CH
      MOV   CL, [SI]
      JCXZ  EXIT
      INC   SI
      MOV   BX, CX      ; Save char numb.
; Sort array
      MOV   DI, SI
SORT_LOOP:
      MOV   SI, DI
      ADD   SI, CX
      MOV   AL, [DI]
CMP_LOOP:
      DEC   SI
      CMP   [SI], AL
      JNC   NEXT_CH
      XCHG  [SI], AL
NEXT_CH:
      CMP   SI, DI
      JNZ   CMP_LOOP
      STOSB
      LOOP  SORT_LOOP
; Display sorted array
      LEA   DI, chBuf
      MOV   DX, DI
      MOV   [DI+BX+1], Word Ptr ("$"*256 + LF)  ; String length without CR
      CALL  DISP_SD
; Scan for most freq. chars
      MOV   CX, BX
      XOR   DH, DH      ; Most frequent count
      MOV   DL, [DI]    ; Most freq. char
SCAN_LOOP:
      INC   CX
      MOV   AL, [DI]
      MOV   SI, DI
      REPE SCASB
      DEC   DI
      MOV   BX, DI
      SUB   BX, SI
      CMP   DH, BL
      JNC   NEXT_CHB
      MOV   DH, BL
      MOV   DL, AL
NEXT_CHB:
      TEST  CX, CX
      JNZ   SCAN_LOOP
; Result
      LEA   AX, STR_LOOP
      PUSH  AX
      MOV   AL, DL
      LEA   DX, sdSpace
      CMP   AL, Space
      JE    DISP_SD
      LEA   DX, sdTab
      CMP   AL, Tab
      JE    DISP_SD
      MOV   DL, AL
      MOV   AH, 2
      INT   21h
DISP_CRLF:
      LEA   DX, sdCrLf
DISP_SD:
      MOV   AH, 9
      INT   21h
EXIT:
      RET
;
.DATA
sdInfo      DB    "Displays most frequent char; enter empty string to exit"
sdCrLf      DB    CR, LF, "$"
sdSpace     DB    "[Space]", CR, LF, "$"
sdTab       DB    "[Tab]", CR, LF, "$"
kbBuf       DB    80
chBuf       EQU   kbBuf + 2
;
      END   START
;

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 3.909 из 5