天天看點

[彙編] 彙編"HelloWorld!"——字元/字元串的輸入輸出

目錄

    • 0. HelloWorld
    • 1. 字元輸入輸入
    • 2. 字元串輸入輸出

0. HelloWorld

;輸入輸出一個字元串
DATA    SEGMENT
    ;資料段代碼
DATA    ENDS           
STACK   SEGMENT
    ;堆棧段代碼
STACK   ENDS
CODE    SEGMENT
        ASSUME DS:DATA, SS:STACK, CS:CODE
START:
STRING  DB 'Hello World!','$'       ;<=>'Hello World!$'
        MOV AX, SEG STRING          ;STRING段首位址送AX
        MOV DS, AX      
        MOV DX, OFFSET STRING       ;STRING偏移位址送DX
        MOV AH, 9                   ;輸出一個以“$”結尾的字元串到顯示器
        INT 21H
        MOV AH, 4CH                 ;傳回DOS
        INT 21H
CODE    ENDS                        ;退出DOS狀态
        END START
           

1. 字元輸入輸入

;輸入輸出一個字元
DATA    SEGMENT
    ;資料段代碼
DATA    ENDS           
STACK   SEGMENT
    ;堆棧段代碼
STACK   ENDS
CODE    SEGMENT
        ASSUME DS:DATA, SS:STACK, CS:CODE
START:
        MOV AH, 1                   ;鍵盤輸入一個字元到AL中
        INT 21H

        MOV DL, AL

        MOV AH, 2                   ;輸出DL中的字元到顯示器
        INT 21H                     

        MOV AH, 4CH                 ;傳回DOS
        INT 21H
CODE    ENDS                        ;退出DOS狀态
        END START
           

2. 字元串輸入輸出

來自https://blog.csdn.net/TanguanhuaD/article/details/81980956

增加了一部分注釋,便于閱讀

;輸入輸出一個字元串
DATA    SEGMENT                     ;資料段代碼
INPUT   DB 'Please input a string:', '$'
OUTPUT  DB 'Your input is:', '$'    ;輸入輸出提示
BUFFER  DB 20                       ;預留20位元組空間
        DB ?                        ;輸入完成後,自動獲得輸入的字元個數
        DB 20 DUP(0)
CRLF    DB 0AH, 0DH, '$'
;BUFFER  DB 20, ?, 20 DUP(?)         ;表示定義了10個重複資料存儲單元(輸入緩沖區)
DATA    ENDS           
STACK   SEGMENT                     ;堆棧段代碼
        DW 20 DUP(0)
STACK   ENDS
CODE    SEGMENT                     ;代碼段代碼
ASSUME  DS:DATA, SS:STACK, CS:CODE
START:
        MOV AX, DATA
        MOV DS, AX
        ;輸入提示
        LEA DX, INPUT               ;取INPUT偏移位址
        MOV AH, 9                   ;輸出一個以“$”結尾的字元串到顯示器
        INT 21H
        ;輸入字元串到DX
        LEA DX, BUFFER
        MOV AH, 0AH                 ;從鍵盤輸入一個字元串到指定緩沖區
        INT 21H
        ;
        MOV AL, BUFFER+1
        ADD AL, 2
        MOV AH, 0
        MOV SI, AX
        MOV BUFFER[SI], '$'
        ;
        LEA DX, CRLF
        MOV AH, 9                   
        INT 21H
        ;輸出提示
        LEA DX, OUTPUT
        MOV AH, 9
        INT 21H
        ;輸出剛剛輸入的字元串
        LEA DX, BUFFER+2
        MOV AH, 9
        INT 21H
        ;
        LEA DX, CRLF
        MOV AH, 9
        INT 21H
        ;傳回DOS
        MOV AH, 4CH
        INT 21H
CODE    ENDS                        ;退出DOS狀态
        END START