日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

串操作指令及其应用程序的设计与调试运行——汇编实验四 用8086汇编完成下题 编制一程序,从键盘输入两个长度不同的字符串,设字符串长度小于25个字符。要求在屏幕上以右边对齐的形式显示出

發布時間:2023/12/4 编程问答 38 豆豆

文章目錄

  • 實驗目的和內容
  • 實驗要求和步驟
  • 實現右對齊
  • 以下為源碼:
  • 方法一
  • 方法二
  • 方法三
  • 測試一——字符串的輸入輸出
  • 測試二——改進
  • 測試三——改進
  • 測試四——改進

實驗目的和內容

實驗要求和步驟

實現右對齊

以下為源碼:

方法一

DATA SEGMENTNUM EQU 25BUF1 DB NUM,?,NUM DUP(?),0AH,0DH,'$' ;緩沖區1,存入字符串1;分別存入:可輸入的最大字符數+1、實際輸入字符個數、開始存放輸入字符的ASCII碼;輸入回車鍵,輸入結束,將回車的ASCII碼0DH作為最后一個字符存入緩沖區,不計入實際存入字符個數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 ;將段寄存器和各個段相關聯START: MOV AX,DATAMOV DS,AX ;初始化DSMOV ES,AX ;初始化ESSTD ;設置DF=1,按照減地址方向,字串處理由后往前!LEA DX ,MES2 ;將MES2地址送到DX寄存器MOV AH,09H ;將9號送入AHINT 21H ;調用DOS 9號功能顯示MES2字符串內容LEA DX,BUF1 ;把BUF1偏移地址送入DXMOV AH,0AHINT 21H ;調用DOS 10號功能,從鍵盤讀取字符存入緩沖區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 ;將實際存放字符個數放入CL寄存器中MOV CH,0 ;補全CX高位寄存器,方便后面字運算LEA SI,BUF1 ;SI定位到第一條字符串首地址INC SI ;SI定位到實際存入字符串前面的地址,也就是實際存入字符數量的所在地址ADD SI,CX ;SI定位到存入字符的最后一位LEA DI,BUF1+1 ;DI定位到實際存放字符數量的地址ADD DI,NUM ;DI定位到可存放字符的緩沖區的最后一個地址,即右對齊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 ;將實際存放字符個數放入CL寄存器中MOV CH,0 ;補全CX高位寄存器,方便后面字運算LEA SI,BUF2 ;SI定位到第一條字符串首地址INC SI ;SI定位到實際存入字符串前面的地址,也就是實際存入字符數量的所在地址ADD SI,CX ;SI定位到存入字符的最后一位LEA DI,BUF2+1 ;DI定位到實際存放字符數量的地址ADD DI,NUM ;DI定位到可存放字符的緩沖區的最后一個地址,即右對齊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,'$' ;緩沖區1,存入字符串1;分別存入:可輸入的最大字符數+1、實際輸入字符個數、開始存放輸入字符的ASCII碼;輸入回車鍵,輸入結束,將回車的ASCII碼0DH作為最后一個字符存入緩沖區,不計入實際存入字符個數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 ;將段寄存器和各個段相關聯START: MOV AX,DATAMOV DS,AX ;初始化DSMOV ES,AX ;初始化ESSTD ;設置DF=1,按照減地址方向,字串處理由后往前!避免數據覆蓋丟失LEA DX,MES2 ;將MES2地址送到DX寄存器MOV AH,09H ;將9號送入AHINT 21H ;調用DOS 9號功能顯示MES2字符串內容LEA DX,BUF1 ;把BUF1偏移地址送入DXMOV AH,0AHINT 21H ;調用DOS 10號功能,從鍵盤讀取字符存入緩沖區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 ;將實際存放字符個數放入CL寄存器中MOV CH,0 ;補全CX高位寄存器,方便后面字運算LEA SI,BUF1+1 ;SI定位到實際存入字符串前面的地址,也就是實際存入字符數量的所在地址ADD SI,CX ;SI定位到存入字符的最后一位LEA DI,BUF1+1 ;DI定位到實際存放字符數量的地址ADD DI,NUM ;DI定位到可存放字符的緩沖區的最后一個地址,即右對齊REP MOVSB ;將每一個字符串中的字符后移至右對齊MOV AL,20H ;便于STOSB指令將AL內容存到DI指向的存儲單元中MOV CX,NUM+2 ;MOV DL,BUF1+1 ;MOV DH,0 ;SUB CX,DX ;計算需要存入空格數量,由于字符串最前面存入了兩個額外單元,故要先+2REP STOSB ;;;;;;;;;;;;MOV CL,BUF2+1 ;將實際存放字符個數放入CL寄存器中MOV CH,0 ;補全CX高位寄存器,方便后面字運算LEA SI,BUF2+1 ;SI定位到實際存入字符串前面的地址,也就是實際存入字符數量的所在地址ADD SI,CX ;SI定位到存入字符的最后一位LEA DI,BUF2+1 ;DI定位到實際存放字符數量的地址ADD DI,NUM ;DI定位到可存放字符的緩沖區的最后一個地址,即右對齊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 ; 緩沖區長度(含回車)ACTHAR DB 0 ; 保留單元, 存放輸入的實際字符個數(不含回車)CHAR DB 25 DUP (0) ; 定義25個字節輸入緩沖區 DSEG ENDS ESEG SEGMENTDISP DB 25 DUP (0),0AH,0DH,'$' ; 定義顯示緩沖區 ESEG ENDSSSEG SEGMENT STACKDB 20H DUP(0) SSEG ENDSCSEG SEGMENTASSUME CS:CSEG,DS:DSEG,ES:ESEG,SS:SSEG START:MOV AX, DSEG ;數據段的段地址送入DSMOV DS, AXMOV AX, ESEG ;附加段的段地址送入ESMOV ES, AXMOV DX, OFFSET SHOW ;顯示“Please enter two strings:”MOV AH, 9INT 21HMOV BL,2 ;輸入字符串數量 NEXT:MOV DX, OFFSET BUF ;等待鍵盤輸入字符串MOV AH, 0AHINT 21HMOV CL, ACTHAR ;將字符串輸出到顯示緩沖區,并右對齊。XOR CH, CHMOV SI, OFFSET CHARADD SI, CXDEC SIMOV DI, OFFSET DISP+24STDREP MOVSBMOV CL, BUF ;顯示緩沖區左邊空位填寫為空格(20H)SUB CL, ACTHAR ;空位總位數XOR CH, CHMOV AL, 20HREP STOSBPUSH DS ;保存DS值PUSH ES ;將ES賦值給DSPOP DS;MOV DX, OFFSET DISP ;顯示輸入的字符串MOV AH, 9INT 21HPOP DS ;恢復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 創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的串操作指令及其应用程序的设计与调试运行——汇编实验四 用8086汇编完成下题 编制一程序,从键盘输入两个长度不同的字符串,设字符串长度小于25个字符。要求在屏幕上以右边对齐的形式显示出的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。