1. 程式人生 > >彙編輸入輸出(單個字元以及字串)

彙編輸入輸出(單個字元以及字串)

簡單的彙編程式碼演示

1、輸入輸出

輸入輸出主要有兩個中斷呼叫,分別為INT 16H 和INT 21H

1.1 INT 16H(ROM BIOS中斷)

原理:
16H中斷服務子程式提供了多個功能,每個功能對應一個功能號碼,呼叫他們的方法是

功能號->AH
INT 16H
功能號 功能 返回引數
0 等待從鍵盤讀字元 AL=字元的ASCII碼,AH=掃描碼
1 讀鍵盤緩衝區字元 若ZF=1,表示緩衝區空;否則表示緩衝區不空,則AL=ASCII值,AH=掃描碼
2 返回鍵盤狀態字 AL=鍵盤狀態位元組

相關示例程式碼(可以跑起來):

主要是從鍵盤中讀取一個字元

DATAS  SEGMENT
    CHAR DB ?
DATAS  ENDS

STACKS  SEGMENT
      DB  128 DUP (?)
STACKS  ENDS

CODES  SEGMENT
     ASSUME    CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,DATAS
    MOV DS,AX

    MOV AH,0    ;進行輸入
    INT 16H
    MOV CHAR,AL

    mov AH,2    ;進行輸出
MOV DL,CHAR INT 21H MOV AH,4CH INT 21H CODES ENDS END START
1.1 INT 21H(DOS中斷)

原理:
功能號傳送AH暫存器,呼叫引數所求的位置,然後傳送INT 21H系統功能呼叫中斷
主要的功能號如下圖所示:

功能號 呼叫引數 說明
1 AL=輸入字串的ASCII值 等待從標準輸入裝置(通常為鍵盤)輸入一個字元,把接受到的字元的ASCII碼值送給AL,並顯示到顯示器的當前游標位置。該功能識別Ctrl-C鍵並做相應處理
2 DL=輸出字元的ASCII值 該輸出功能也使游標跟隨移動
0AH DS:DX指向自定義的輸入緩衝區首地址 從標準輸入裝置(通常為鍵盤)輸入一串字元到使用者定義的緩衝區,直到按下Enter鍵為止。在接受的同時顯示到螢幕上,並且識別Ctrl-C鍵,也處理DOS編輯器

示例程式碼:

;輸出hello world
;data資料段定義
data segment
  string db 'hello world','$' ;切忌串結束符$
data ends

;程式碼段定義
code segment
;程式開始
start:
  mov ax,data  ;將資料段段地址裝入AX暫存器
  mov ds,ax ;將資料段段地址通過通用暫存器AX裝入DS
  mov dx,offset string ;將串的段內地址裝入DX
  mov ah,09h ;呼叫DOS的09H號功能,傳入引數DS:DX=串地址,'$'結束字串
  int 21h
  mov ah,4ch ;呼叫DOS的4CH號功能,帶返回碼結束,返回碼存在於AL
  int 21h
code ends  ;程式碼段定義結束
end start  ;程式結束

執行結果如下:

2、字串的輸入

這裡用到了上面DOS中斷的0AH功能
可以將一段字串讀入並顯示在螢幕上,程式碼如下

DATAS SEGMENT
    buffer db 60;定義緩衝區長度
           db ? ;預留實際輸入字元個數的技術單元
           db 60 dup(?);設DS已是buffer的段基址
DATAS ENDS

STACKS SEGMENT
    ;此處輸入堆疊段程式碼
STACKS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,DATAS
    MOV DS,AX

    mov ah,0ah;接受一串字元
    lea dx,buffer
    int 21h
    ;此處輸入程式碼段程式碼
    MOV AH,4CH
    INT 21H
CODES ENDS
    END START

相關推薦

彙編輸入輸出單個字元以及字串

簡單的彙編程式碼演示 1、輸入輸出 輸入輸出主要有兩個中斷呼叫,分別為INT 16H 和INT 21H 1.1 INT 16H(ROM BIOS中斷) 原理: 16H中斷服務子程式提供了多個功能,每個功能對應一個功能號碼,呼叫他們的方法是

Java中將單個字元以及字串轉化為數字

在刷題過程中,突然忘記了如何進行轉換了,現系統的測試下: package SwordOffer; import java.util.DoubleSummaryStatistics; /** *

Linux下程式輸入輸出^H、^C問題

問題:        1、在linux的遠端終端上執行程式出現個人開發的應用按backspace鍵時有^H等不識別字符;        2、在CentOS7下的應用程式按backspace可以刪除但是delete鍵就無法實現像windows下的刪除後側的字元;    

字串和格式化輸入/輸出練習

C Primer Plus第四章練習如下: 1.編寫一個程式,提示使用者輸入名和姓,然後以“名,姓”的格式打印出來 程式碼: #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <st

Chapter 4 字串和格式化輸入\輸出Character strings and formatted input\output

重要內容 1. C中的字串一定以空字元結尾。這意味著陣列的容量至少比待儲存字串中的字元數多1. 2. 建立符號常量:      方法1: 宣告一個變數,然後將該變數設定為所需的常量。      方法2:用#define NAME value  (注:一般用大寫表示符號

JAVA輸入輸出IO字元

上一篇《JAVA輸入輸出(IO)之位元組流》介紹了JAVA位元組輸入輸出流的一些用法,位元組流一般是用於讀寫二進位制資料的,當我們要讀些字元資料的時候,如文字檔案,就顯得有些麻煩。所以JAVA還提供了專門用於讀寫字元資料的字元流。 字元輸入流 java.

N!的階乘附帶簡單大整數類的輸入輸出暫時沒有深入的了解

ios sta 好的 n! width ear ati str cstring Given an integer N(0 ≤ N ≤ 10000), your task is to calculate N! 我的思路:就想著大整數類去了,才發現自己還不能很好的掌握,其實

linux雲自動化運維基礎知識4系統結構,vim,管理輸入輸出,正則表達式

linux運維linux系統結構 linux是一個倒樹結構 linux中所有的東西都是文件 這些文件都在系統頂級目錄“/” /就是根目錄 /目錄以下為二級目錄這些目錄都是系統裝機時系統自動建立的如圖2.二級目錄的作用/bin ##二進制可執行文件也就是系統命令/sbin ##系統管理

C++的終端輸入輸出C++學習筆記 3

C++和C的輸入輸出方面的不同 在C中輸入和輸出,常使用函式scanf和printf。 C++除了可以照常使用這兩個函式進行輸入和輸出外,還增加了標準輸入流物件cin(念 see-in)和標準輸出流物件cout(念 see-out) scanf("%d",i); printf

C++檔案輸入輸出C++學習筆記 1

為了開啟一個檔案供輸入或輸出,標頭檔案需要包括 #include<iostream> 和#include<fstream> iostream庫除了支援終端輸入輸出,也支援檔案的輸入和輸出。 1. 開啟一個輸出檔案 必須宣告一個ofstream型別的物件,來

C程式設計--對檔案的輸入輸出案例

第十章 問題一(fputc()函式的使用) 從鍵盤中輸入一些字元,逐個把他們送到磁碟上去,直到使用者輸入一個’#'鍵為止; #include<stdio.h> #include<stdlib.h>//用於 exit(0); int ma

Python基礎-python的輸入輸出python2與python3的區別;算術運算子

程式:輸入(鍵盤)----程式碼(java/python/c)----輸出(螢幕) #每一行程式碼只負責完成一個動作 #print的作用:把內容輸出到螢幕上來 #python是一個格式非常嚴格的程式設計語言,每行程式碼前面都不要增加空格 輸入: 1.1 pyhon2*

LaTeX空行以及輸入矩陣解決矩陣報錯

Lax空行以及輸入矩陣 空行 空行可以使用 \\[2ex] 其中 2ex 可以隨便設為自己想要的距離。 輸入矩陣 輸入矩陣開始總是報錯,後來我發現是因為沒有什麼巨集包之類的,所以只需要引入巨集包就行了。 \documentclass{article

輸入/輸出NIO.2

Path、Paths和Files核心API 早期的Java只提供了一個File類來訪問檔案系統,但File類的功能比較有限,它不能利用特定檔案系統的特性,File所提供的方法的效能也不高。而且,其大多數方法在出錯時僅返回失敗,並不會提供異常資訊。 具體的看這裡: https://blo

輸入/輸出

推回輸入流 在輸入/輸出流體系中,有兩個特殊的流與眾不同,就是PushbackReader和PushbackInputStream: 這兩個推回輸入流都帶有一個推回緩衝區,當程式呼叫這兩個推回輸入流的unread()方法時,系統將會把指定陣列的內容推回到該緩衝區裡,而推回輸入流每次呼叫

輸入/輸出

File類 訪問檔案和目錄 不管是檔案還是目錄都是使用File來操作的,File能新建、刪除、重新命名檔案和目錄,File不能訪問檔案內容本身。如果需要訪問檔案內容本身,則需要使用輸入/輸出流。 File類提供了很多方法來操作檔案和目錄: 流的分類 1. 輸入流和輸出流

C ++基礎 | 格式化輸出,檔案輸入輸出File IO,標頭檔案Header Files_3

目錄 格式化輸出 檔案輸入輸出(File IO) 標頭檔案(Header Files) 格式化輸出 要格式化資料,我們可以使用轉義字串(Escape Sequence)也稱字元實體(Character Entity)。這些不需要任何額外的庫。 C ++ 轉義字串

java輸入輸出13 字符集和CharSet

簡而言之,把看得懂字元轉換成看不懂的二進位制數就是編碼,將二進位制數轉換成看得懂的字元就是解碼 字符集其實是很簡單,沒有任何技術難度的,只是為了解決二進位制序列和字元之間的對應關係,需要一個大家都認同的字符集而已。 具體的講解穿插在程式碼中 import java.ni

java輸入輸出14NIO.2

NIO.2是java7對原有的NIO進行了重大改進 這裡首先介紹一下Path,Paths,Files的一些用法,具體的講解穿插在程式碼中 //Path介面代表一個平臺無關的平臺路徑 import java.nio.file.Path; import java.nio.fi

java輸入輸出17監控檔案變化

可以通過WatchSercice物件來註冊監聽系統檔案的變化,具體的講解穿插在程式碼中 import java.nio.file.*; public class WatchServiceTest { public static void main(String a