耐思尼克的建站宝盒,毕业设计做网站有哪些方面,网站设计报价,中高端网站建设文章目录实验目的和内容实验要求和步骤实现右对齐以下为源码#xff1a;方法一方法二方法三测试一——字符串的输入输出测试二——改进测试三——改进测试四——改进实验目的和内容 实验要求和步骤 实现右对齐 以下为源码#xff1a; 方法一
DATA SEGMENTNUM EQU 25BUF1 D…
文章目录实验目的和内容实验要求和步骤实现右对齐以下为源码方法一方法二方法三测试一——字符串的输入输出测试二——改进测试三——改进测试四——改进实验目的和内容 实验要求和步骤 实现右对齐 以下为源码 方法一
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 ;设置DF1,按照减地址方向字串处理由后往前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,BUF11 ;将实际存放字符个数放入CL寄存器中MOV CH,0 ;补全CX高位寄存器方便后面字运算LEA SI,BUF1 ;SI定位到第一条字符串首地址INC SI ;SI定位到实际存入字符串前面的地址也就是实际存入字符数量的所在地址ADD SI,CX ;SI定位到存入字符的最后一位LEA DI,BUF11 ;DI定位到实际存放字符数量的地址ADD DI,NUM ;DI定位到可存放字符的缓冲区的最后一个地址即右对齐REP MOVSB ;MOV AL,20H ;MOV AH,0MOV CX,NUM2 ;MOV DL,BUF11 ;MOV DH,0 ;SUB CX,DX ;REP STOSB ;MOV CL,BUF21 ;将实际存放字符个数放入CL寄存器中MOV CH,0 ;补全CX高位寄存器方便后面字运算LEA SI,BUF2 ;SI定位到第一条字符串首地址INC SI ;SI定位到实际存入字符串前面的地址也就是实际存入字符数量的所在地址ADD SI,CX ;SI定位到存入字符的最后一位LEA DI,BUF21 ;DI定位到实际存放字符数量的地址ADD DI,NUM ;DI定位到可存放字符的缓冲区的最后一个地址即右对齐REP MOVSBMOV AL,20HMOV CX,NUM2MOV DL,BUF21MOV DH,0SUB CX,DXREP STOSBLEA DX,MES3MOV AH,09HINT 21H ;LEA DX,BUF12INT 21H ;LEA DX,BUF22INT 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 ;设置DF1,按照减地址方向字串处理由后往前避免数据覆盖丢失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,BUF11 ;将实际存放字符个数放入CL寄存器中MOV CH,0 ;补全CX高位寄存器方便后面字运算LEA SI,BUF11 ;SI定位到实际存入字符串前面的地址也就是实际存入字符数量的所在地址ADD SI,CX ;SI定位到存入字符的最后一位LEA DI,BUF11 ;DI定位到实际存放字符数量的地址ADD DI,NUM ;DI定位到可存放字符的缓冲区的最后一个地址即右对齐REP MOVSB ;将每一个字符串中的字符后移至右对齐MOV AL,20H ;便于STOSB指令将AL内容存到DI指向的存储单元中MOV CX,NUM2 ;MOV DL,BUF11 ;MOV DH,0 ;SUB CX,DX ;计算需要存入空格数量由于字符串最前面存入了两个额外单元故要先2REP STOSB ;;;;;;;;;;;;MOV CL,BUF21 ;将实际存放字符个数放入CL寄存器中MOV CH,0 ;补全CX高位寄存器方便后面字运算LEA SI,BUF21 ;SI定位到实际存入字符串前面的地址也就是实际存入字符数量的所在地址ADD SI,CX ;SI定位到存入字符的最后一位LEA DI,BUF21 ;DI定位到实际存放字符数量的地址ADD DI,NUM ;DI定位到可存放字符的缓冲区的最后一个地址即右对齐REP MOVSBMOV AL,20H ;存入空格的ASCII码MOV CX,NUM2MOV DL,BUF21MOV DH,0SUB CX,DXREP STOSB ;同上LEA DX,MES3MOV AH,09HINT 21H ;LEA DX,BUF12INT 21H ;LEA DX,BUF22INT 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 DISP24STDREP MOVSBMOV CL, BUF ;显示缓冲区左边空位填写为空格20HSUB 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,STRING2MOV CL,STRING1MOV 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,STRING1;MOV BH,0LEA SI,STRING2MOV BYTE PTR[SIBX],$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,STRING2MOV 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;;;;;;;;;;在输入字符串末尾插入符号24HMOV AL,STRING1MOV AH,0ADD AX,2MOV SI,AXMOV STRING[SI],24HLEA DX,STRING2MOV AH,9INT 21HMOV AH,4CHINT 21H
CODES ENDSEND START