彙編輸入字符串常見的實驗題

(1)輸入10字符串並且將他們顯示出來

DATAS SEGMENT    
MESG DB 'input Character string',0dH,0ah,'$'
BUF   DB 20         ;這裏的20爲指定存放字符的個數(理論上的)
      DB ?          ;這的?可變,實際存放字符的個數(系統自動計算)
      DB 20 DUP(?)  ;這裏的20是你在數據段開闢的空間  
CRLF  DB 0AH,0DH,'$'
DATAS ENDS
STACKS SEGMENT
       DB 200 DUP(?)
STACKS ENDS
CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,DATAS
    MOV DS,AX
    MOV AH,9H
    MOV DX,OFFSET MESG
    INT 21H          ;這段功能的作用是輸出字符串MESG

    MOV AH,10        ;10號中斷,接收輸入字符串,此時DX爲存放字符串的有效地址
    LEA DX,BUF
    INT 21H 

    LEA DX,CRLF
    MOV AH,9
    INT 21H          ;這段功能是再一次輸出換行回車

    MOV AL,BUF+1     ;獲取字符串中字符的個數
    ADD AL,2       
    MOV AH,0
    MOV SI,AX
    MOV BUF[SI],0H  ;寄存器間接尋址
    LEA DX,BUF+2     ;輸出實際的字符串
    MOV AH,9
    INT 21H


    MOV AH,4CH
    INT 21H
CODES ENDS
    END START

(2)變形。
輸入10個數並且將他們反向輸出(利用了堆棧的先進先出的特點)

DATAS SEGMENT
    ;此處輸入數據段代碼  
DATAS ENDS
STACK SEGMENT
    DW 50 DUP(?)
STACK ENDS
CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACK
START:
    MOV AX,STACK
    MOV SS,AX
    MOV CX,10
    L1:
    MOV AH,01H
    INT 21H
    PUSH AX
    LOOP L1
    MOV DL,0AH
    MOV AH,02H
    INT 21H
    MOV DL,0DH
    MOV AH,02H
    INT 21H
    MOV CX,10
    L2:
    POP DX
    MOV AH,02H
    INT 21H
    LOOP L2
    ;此處輸入代碼段代碼
    MOV AH,4CH
    INT 21H
CODES ENDS
    END START  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章