汇编基础知识之输入输出
最近在學習匯編程序,但輸入輸出是我遇到的第一個難題,這里就簡單講訴一些匯編的基本輸出輸出字符串、字符、輸出數字等知識,僅供大家學習。這只是一些基礎知識,匯編高手亦可以溫習一些基礎的輸入輸出知識.
?
一.輸出字符串
下面是調用9號功能輸出字符串"Hello World"的代碼。
DATAS SEGMENT;輸出的字符串 13回車 10換行 $結束標志(\0) Input DB 13,10,'Hello Word!',13,10,'$' DATAS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS START:MOV AX,DATASMOV DS,AX ;數據放入DSLEA DX,Input ;字符串偏移起始DX,同MOV DX,OFFSET ASC指令MOV AH,9 ;09功能 打印字符串INT 21H ;INT 21H是DOS中斷功能調用的中斷號,調用功能MOV AH,4CH ;返回DOS系統INT 21H CODES ENDSEND START輸出結果為:
?
二.輸入輸出單個字符
下面是調用2號功能輸出單個字符"a"和調用1號功能輸入單個字符的代碼。
DATAS SEGMENT;此處輸入數據段代碼Input DB 13,10,'Please input:',13,10,'$' DATAS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS START:MOV AX,DATASMOV DS,AX ;數據放入DSMOV DL,'a' ;字符存入寄存器MOV AH,02H ;調用2號功能輸出單個字符INT 21H ;INT 21H調用功能;調用9號功能輸出字符串"請輸入"LEA DX,Input MOV AH,9 INT 21HMOV AH,01H ;調用1號功能輸入字符(只能輸入一個字符)INT 21HMOV AH,4CH ;返回DOS系統INT 21H CODES ENDSEND START?輸出結果為:
?
三.輸出4位數字
在做匯編實驗時,總是遇到一個問題,不會輸出一串數字如:2030.(8位最大5位數)
下面就是輸出一串數字的代碼,這里采用的方法是(必須是4位數字)
1.先除以1000.2030/1000=2(商)..30(余)判斷商是否為0,不為0輸出;
2.輸出玩千位2后,商賦值給寄存器接著跳轉到判斷百位;
3.這里重點是設置了一個判斷變量Nozero,如果這里是3/1000=0(商)..3(余),為0就判斷該變量是否為0,為0表示它小于1000,不輸出0,否則會輸出0003.而當數字第一位不為0時(如2030第一位是2,不為0)就令變量Nozero=1,后面要輸出的0都是在數字中顯示輸出.(如2000,當輸出2時,Nozero=1,余數為0,后面的0均輸出.而30只會到十位Nozero才賦值為1,輸出個位的0).
4.依次判斷十位,個位.
輸出的結果是:而當A賦值為3會輸出相應的3而不是0003.
此方法似乎很笨拙,輸出數字每次都是書寫了4遍重復的輸出代碼,而且來回的跳轉,但是更重要的是提供一個Nozero的思想,在C、C++、C#、Java中常用到的設置bool型變量的方法在匯編程序中同樣有用并好用.在實驗中我也采用的是下面的定義子程序方法輸出數字.
?
四.采用函數輸出4位數字
下面是百度知道里面的一種方法,調用函數輸出數字的方法,由于還沒有學到子函數,所以這里沒有驗證該方法,但感覺此方法還是相當有用的一種方法.上面設置的Nozero也是參照了它的思想.僅供大家學習.
網址:http://zhidao.baidu.com/question/54461195.html
outd procpush cxmov nozero,0 ;like a boolean variable mov cx, 10000call decdivmov cx, 1000call decdivmov cx, 100call decdivmov cx, 10call decdivmov cx, 1call decdiv;cmp nozero, 0;jne outdexit;mov dl, 30h;mov ah, 2;int 21h outdexit:pop cxret ;call: 被除數在bx傳入,除數在cx傳入 ;ret: 打印商,余數送bx decdiv procmov ax, bxmov dx, 0div cxmov bx, dxmov dl, alcmp dl, 0jne dispdigitcmp nozero, 0jne dispdigitjmp decdivexit dispdigit:mov nozero, 1add dl, 30hmov ah, 2int 21h decdivexit:ret decdiv endp outd endp?
五.總結
最后,上面的文章主要是給剛學習匯編的同學參考,大神略過.同時,代碼也不是很優化,比較冗余,但它還是提供了一些很好的匯編思想供大家學習,希望大家能學到一些思想.反正對我剛學習匯編的此時,上面4個代碼還是非常有用的.
由于剛學習發表博客,可能內容和格式不是很好,還請海涵! By: Eastmount
總結
以上是生活随笔為你收集整理的汇编基础知识之输入输出的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Masm for Windows集成开发
- 下一篇: 汇编排序知识之冒泡排序