串操作指令及其应用程序的设计与调试运行——汇编实验四 用8086汇编完成下题 编制一程序,从键盘输入两个长度不同的字符串,设字符串长度小于25个字符。要求在屏幕上以右边对齐的形式显示出
生活随笔
收集整理的這篇文章主要介紹了
串操作指令及其应用程序的设计与调试运行——汇编实验四 用8086汇编完成下题 编制一程序,从键盘输入两个长度不同的字符串,设字符串长度小于25个字符。要求在屏幕上以右边对齐的形式显示出
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
文章目錄
- 實驗?zāi)康暮蛢?nèi)容
- 實驗要求和步驟
- 實現(xiàn)右對齊
- 以下為源碼:
- 方法一
- 方法二
- 方法三
- 測試一——字符串的輸入輸出
- 測試二——改進
- 測試三——改進
- 測試四——改進
實驗?zāi)康暮蛢?nèi)容
實驗要求和步驟
實現(xiàn)右對齊
以下為源碼:
方法一
DATA SEGMENTNUM EQU 25BUF1 DB NUM,?,NUM DUP(?),0AH,0DH,'$' ;緩沖區(qū)1,存入字符串1;分別存入:可輸入的最大字符數(shù)+1、實際輸入字符個數(shù)、開始存放輸入字符的ASCII碼;輸入回車鍵,輸入結(jié)束,將回車的ASCII碼0DH作為最后一個字符存入緩沖區(qū),不計入實際存入字符個數(shù)BUF2 DB NUM,?,NUM DUP(?),0AH,0DH,'$'MES2 DB 0AH,0DH,'Please enter 2 strings: ', 0AH,0DH,'$'MES3 DB 0AH,0DH,'The result is:',0AH,0DH,'$' DATA ENDS CODE SEGMENTASSUME DS:DATA,CS:CODE ;將段寄存器和各個段相關(guān)聯(lián)START: MOV AX,DATAMOV DS,AX ;初始化DSMOV ES,AX ;初始化ESSTD ;設(shè)置DF=1,按照減地址方向,字串處理由后往前!LEA DX ,MES2 ;將MES2地址送到DX寄存器MOV AH,09H ;將9號送入AHINT 21H ;調(diào)用DOS 9號功能顯示MES2字符串內(nèi)容LEA DX,BUF1 ;把BUF1偏移地址送入DXMOV AH,0AHINT 21H ;調(diào)用DOS 10號功能,從鍵盤讀取字符存入緩沖區(qū)BUF1中MOV AH,2 ;DOS 2號功能,顯示一個字符MOV DL,0AH ;回車INT 21H ;MOV DL,0DH ;換行INT 21H ;第二個字符串在回車、換行后再讀取LEA DX,BUF2 ;MOV AH,0AH ;INT 21H ;讀入第二個字符串MOV CL,BUF1+1 ;將實際存放字符個數(shù)放入CL寄存器中MOV CH,0 ;補全CX高位寄存器,方便后面字運算LEA SI,BUF1 ;SI定位到第一條字符串首地址INC SI ;SI定位到實際存入字符串前面的地址,也就是實際存入字符數(shù)量的所在地址ADD SI,CX ;SI定位到存入字符的最后一位LEA DI,BUF1+1 ;DI定位到實際存放字符數(shù)量的地址ADD DI,NUM ;DI定位到可存放字符的緩沖區(qū)的最后一個地址,即右對齊REP MOVSB ;MOV AL,20H ;MOV AH,0MOV CX,NUM+2 ;MOV DL,BUF1+1 ;MOV DH,0 ;SUB CX,DX ;REP STOSB ;MOV CL,BUF2+1 ;將實際存放字符個數(shù)放入CL寄存器中MOV CH,0 ;補全CX高位寄存器,方便后面字運算LEA SI,BUF2 ;SI定位到第一條字符串首地址INC SI ;SI定位到實際存入字符串前面的地址,也就是實際存入字符數(shù)量的所在地址ADD SI,CX ;SI定位到存入字符的最后一位LEA DI,BUF2+1 ;DI定位到實際存放字符數(shù)量的地址ADD DI,NUM ;DI定位到可存放字符的緩沖區(qū)的最后一個地址,即右對齊REP MOVSBMOV AL,20HMOV CX,NUM+2MOV DL,BUF2+1MOV DH,0SUB CX,DXREP STOSBLEA DX,MES3MOV AH,09HINT 21H ;LEA DX,BUF1+2INT 21H ;LEA DX,BUF2+2INT 21H ;MOV AH,4CHINT 21HCODE ENDSEND START方法二
DATA SEGMENTNUM EQU 25BUF1 DB NUM,?,NUM DUP(?),0AH,0DH,'$' ;緩沖區(qū)1,存入字符串1;分別存入:可輸入的最大字符數(shù)+1、實際輸入字符個數(shù)、開始存放輸入字符的ASCII碼;輸入回車鍵,輸入結(jié)束,將回車的ASCII碼0DH作為最后一個字符存入緩沖區(qū),不計入實際存入字符個數(shù)BUF2 DB NUM,?,NUM DUP(?),0AH,0DH,'$' MES2 DB 0AH,0DH,'Please enter 2 strings: ', 0AH,0DH,'$'MES3 DB 0AH,0DH,'The result is:',0AH,0DH,'$' DATA ENDS CODE SEGMENTASSUME DS:DATA,CS:CODE ;將段寄存器和各個段相關(guān)聯(lián)START: MOV AX,DATAMOV DS,AX ;初始化DSMOV ES,AX ;初始化ESSTD ;設(shè)置DF=1,按照減地址方向,字串處理由后往前!避免數(shù)據(jù)覆蓋丟失LEA DX,MES2 ;將MES2地址送到DX寄存器MOV AH,09H ;將9號送入AHINT 21H ;調(diào)用DOS 9號功能顯示MES2字符串內(nèi)容LEA DX,BUF1 ;把BUF1偏移地址送入DXMOV AH,0AHINT 21H ;調(diào)用DOS 10號功能,從鍵盤讀取字符存入緩沖區(qū)BUF1中MOV AH,2 ;DOS 2號功能,顯示一個字符MOV DL,0AH ;回車INT 21H MOV DL,0DH ;換行INT 21H ;第二個字符串在回車、換行后再讀取LEA DX,BUF2 ;MOV AH,0AH ;INT 21H ;讀入第二個字符串MOV CL,BUF1+1 ;將實際存放字符個數(shù)放入CL寄存器中MOV CH,0 ;補全CX高位寄存器,方便后面字運算LEA SI,BUF1+1 ;SI定位到實際存入字符串前面的地址,也就是實際存入字符數(shù)量的所在地址ADD SI,CX ;SI定位到存入字符的最后一位LEA DI,BUF1+1 ;DI定位到實際存放字符數(shù)量的地址ADD DI,NUM ;DI定位到可存放字符的緩沖區(qū)的最后一個地址,即右對齊REP MOVSB ;將每一個字符串中的字符后移至右對齊MOV AL,20H ;便于STOSB指令將AL內(nèi)容存到DI指向的存儲單元中MOV CX,NUM+2 ;MOV DL,BUF1+1 ;MOV DH,0 ;SUB CX,DX ;計算需要存入空格數(shù)量,由于字符串最前面存入了兩個額外單元,故要先+2REP STOSB ;;;;;;;;;;;;MOV CL,BUF2+1 ;將實際存放字符個數(shù)放入CL寄存器中MOV CH,0 ;補全CX高位寄存器,方便后面字運算LEA SI,BUF2+1 ;SI定位到實際存入字符串前面的地址,也就是實際存入字符數(shù)量的所在地址ADD SI,CX ;SI定位到存入字符的最后一位LEA DI,BUF2+1 ;DI定位到實際存放字符數(shù)量的地址ADD DI,NUM ;DI定位到可存放字符的緩沖區(qū)的最后一個地址,即右對齊REP MOVSBMOV AL,20H ;存入空格的ASCII碼MOV CX,NUM+2MOV DL,BUF2+1MOV DH,0SUB CX,DXREP STOSB ;同上LEA DX,MES3MOV AH,09HINT 21H ;LEA DX,BUF1+2INT 21H ;LEA DX,BUF2+2INT 21H ;MOV AH,4CHINT 21HCODE ENDSEND START方法三
DSEG SEGMENTSHOW DB 'Please enter two strings:',0AH,0DH,'$' ;提示鍵盤輸入BUF DB 25 ; 緩沖區(qū)長度(含回車)ACTHAR DB 0 ; 保留單元, 存放輸入的實際字符個數(shù)(不含回車)CHAR DB 25 DUP (0) ; 定義25個字節(jié)輸入緩沖區(qū) DSEG ENDS ESEG SEGMENTDISP DB 25 DUP (0),0AH,0DH,'$' ; 定義顯示緩沖區(qū) ESEG ENDSSSEG SEGMENT STACKDB 20H DUP(0) SSEG ENDSCSEG SEGMENTASSUME CS:CSEG,DS:DSEG,ES:ESEG,SS:SSEG START:MOV AX, DSEG ;數(shù)據(jù)段的段地址送入DSMOV DS, AXMOV AX, ESEG ;附加段的段地址送入ESMOV ES, AXMOV DX, OFFSET SHOW ;顯示“Please enter two strings:”MOV AH, 9INT 21HMOV BL,2 ;輸入字符串數(shù)量 NEXT:MOV DX, OFFSET BUF ;等待鍵盤輸入字符串MOV AH, 0AHINT 21HMOV CL, ACTHAR ;將字符串輸出到顯示緩沖區(qū),并右對齊。XOR CH, CHMOV SI, OFFSET CHARADD SI, CXDEC SIMOV DI, OFFSET DISP+24STDREP MOVSBMOV CL, BUF ;顯示緩沖區(qū)左邊空位填寫為空格(20H)SUB CL, ACTHAR ;空位總位數(shù)XOR CH, CHMOV AL, 20HREP STOSBPUSH DS ;保存DS值PUSH ES ;將ES賦值給DSPOP DS;MOV DX, OFFSET DISP ;顯示輸入的字符串MOV AH, 9INT 21HPOP DS ;恢復(fù)DS值DEC BLJNZ NEXTMOV AH, 4CHINT 21HCSEG ENDSEND START測試一——字符串的輸入輸出
DATAS SEGMENT;NUM EQU 25;STRING DB NUM,?,NUM DUP(?),0AH,0DH,'$'STRING DB 25,?,25 DUP(?),0AH,0DH,'$'MES1 DB 'Please enter a string:',0AH,0DH,'$'MES2 DB 0AH,0DH,'The answer is:',0AH,0DH,'$' DATAS ENDS;這一部分是不需要的 STACKS SEGMENT STACKDB 200 DUP(?) STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKS START:MOV AX,DATASMOV DS,AXLEA DX,MES1MOV AH,09HINT 21HLEA DX,STRINGMOV AH,0AHINT 21HLEA DX,MES2MOV AH,09HINT 21H;;;;;;;;;LEA SI,STRING+2MOV CL,STRING+1MOV AH,2 NEXT:MOV DL,[SI]INT 21HINC SIDEC CXJNZ NEXTMOV AH,4CHINT 21H CODES ENDSEND START測試二——改進
DATAS SEGMENT;NUM EQU 25;STRING DB NUM,?,NUM DUP(?),0AH,0DH,'$'STRING DB 25,?,25 DUP(?),0AH,0DH,'$'MES1 DB 'Please enter a string:',0AH,0DH,'$'MES2 DB 0AH,0DH,'The answer is:',0AH,0DH,'$' DATAS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS START:MOV AX,DATASMOV DS,AXLEA DX,MES1MOV AH,09HINT 21HLEA DX,STRINGMOV AH,0AHINT 21HLEA DX,MES2MOV AH,09HINT 21H;;;;;;;;;MOV BL,STRING+1;MOV BH,0LEA SI,STRING+2MOV BYTE PTR[SI+BX],'$'MOV DX,SIMOV AH,9INT 21HMOV AH,4CHINT 21H CODES ENDSEND START測試三——改進
DATAS SEGMENT;NUM EQU 25;STRING DB NUM,?,NUM DUP(?),0AH,0DH,'$';認準美元符號24H,才允許9號功能輸出字符串STRING DB 25,?,25 DUP(24H),0AH,0DH,'$'MES1 DB 'Please enter a string:',0AH,0DH,'$'MES2 DB 0AH,0DH,'The answer is:',0AH,0DH,'$' DATAS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS START:MOV AX,DATASMOV DS,AXLEA DX,MES1MOV AH,09HINT 21HLEA DX,STRINGMOV AH,0AHINT 21HLEA DX,MES2MOV AH,09HINT 21H;;;;;;;;;LEA DX,STRING+2MOV AH,9INT 21HMOV AH,4CHINT 21H CODES ENDSEND START測試四——改進
DATAS SEGMENT;NUM EQU 25;STRING DB NUM,?,NUM DUP(?),0AH,0DH,'$';認準美元符號24H,才允許9號功能輸出字符串STRING DB 25,?,25 DUP(?),0AH,0DH,'$'MES1 DB 'Please enter a string:',0AH,0DH,'$'MES2 DB 0AH,0DH,'The answer is:',0AH,0DH,'$' DATAS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS START:MOV AX,DATASMOV DS,AXLEA DX,MES1MOV AH,09HINT 21HLEA DX,STRINGMOV AH,0AHINT 21HLEA DX,MES2MOV AH,09HINT 21H;;;;;;;;;;在輸入字符串末尾插入符號(24H)MOV AL,STRING+1MOV AH,0ADD AX,2MOV SI,AXMOV STRING[SI],24HLEA DX,STRING+2MOV AH,9INT 21HMOV AH,4CHINT 21H CODES ENDSEND START 創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的串操作指令及其应用程序的设计与调试运行——汇编实验四 用8086汇编完成下题 编制一程序,从键盘输入两个长度不同的字符串,设字符串长度小于25个字符。要求在屏幕上以右边对齐的形式显示出的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 重瓣红玫瑰的功效与作用、禁忌和食用方法
- 下一篇: 山核桃树皮的功效与作用、禁忌和食用方法