实验一汇编语言程序设计.docx
《实验一汇编语言程序设计.docx》由会员分享,可在线阅读,更多相关《实验一汇编语言程序设计.docx(9页珍藏版)》请在冰豆网上搜索。
实验一汇编语言程序设计
实验一汇编语言程序设计
实验一 汇编语言程序设计
一、实验目的
1、掌握Lab6000p实验教学系统基本操作; 2、掌握8088/8086汇编语言的基本语法结构; 3、熟悉8088/8086汇编语言程序设计基本方法二、实验设备
装有emu8086软件的PC机三、实验内容
1、有一个10字节的数组,其值分别是80H,03H,5AH,FFH,97H,64H,BBH,7FH,0FH,D8H。
编程并显示结果:
如果数组是无符号数,求出最大值,并显示;如果数组是有符号数,求出最大值,并显示。
2、将二进制数500H转换成二-十进制码,并显示“500H的BCD是:
”3、将二-十进制码7693转换成ASCII码,并显示“BCD码7693的ASCII是:
”4、两个长度均为100的内存块,先将内存块1全部写上88H,再将内存块1的内容移至内存块2。
在移动的过程中,显示移动次数1,2,3…0AH…64H
5、键盘输入一个小写字母(a~z),转换成大写字母显示:
请输入一个小写字母(a~z):
转换后的大写字母是:
6、实现4字节无符号数加法程序,并显示结果,如99223344H+99223344H=xxxxxxxxH四、实验代码及结果、实验代码:
第1页
DATASEGMENT
SZDB80H,03H,5AH,0FFH,97H,64H,0BBH,7FH,0FH,0D8H;存进数组 SHOWDB'THEMAXIS:
','$'DATAENDSCODESEGMENT
ASSUMECS:
CODE,DS:
DATASTART:
MOV AX,DATA ;把数据的基地址赋给DS MOV DS,AX
MOV DX,OFFSETSHOW ;调用DOS显示字符串 MOV AH,09H
INT 21H
MOV SI,OFFSETSZ ;数组的偏移地址赋给SI MOV CX,10 ;存进数组的长度给CX MOV DH,80H ;将数组的第一个数写进DHNEXT:
MOV BL,[SI] ;将数组的第一个数写进BL CMP DH,BL ;比较DH和BL中数的到校 JAE NEXT1 ;如果DH中的数大于BL中,将跳转到NEXT1 MOV DH,BL;如果DH中的数小于BL中,将BL中的数赋给DHNEXT1:
INC SI ;偏移地址加1
LOOP NEXT;循环,CX自减一直到0,DH中存数组的最大值 ;接下来的程序是将将最大值DH在屏幕上显示输出 MOV BX,02H
第2页
NEXT2:
MOV CL,4
ROL DH,CL ;将DH循环右移四位 MOV AL,DH
AND AL,0FH ;将AL高位清零,一位一位进行ASCII码转换 CMP AL,09H ;与09H比较大小
JBE NEXT3 ;若小于,跳转至NEXT3,证明数值在0-9之间
ADD AL,07H;若大于,则证明为字母,因为字母与数字的ASCII码相差7,所以要加上7NEXT3:
ADD AL,30H ;因为转换为ASCII码要加30H MOV DL,AL
MOV AH,2 ;DOS中断显示 INT 21H DEC BX JNZ NEXT2 MOV DL,'H' MOV AH,2 INT 21HCODEENDS ENDSTART实验结果:
第3页
第4页
、实验代码DATASEGMENT
SZDB80H,03H,5AH,0FFH,97H,64H,0BBH,7FH,0FH,0D8H ;存进数组 SHOWDB'THEMAXIS:
','$'DATAENDSCODESEGMENT
ASSUMECS:
CODE,DS:
DATASTART:
MOV AX,DATA ;把数据的基地址赋给DS MOV DS,AX
MOV DX,OFFSETSHOW ;调用DOS显示字符串 MOV AH,09H
INT 21H
MOV SI,OFFSETSZ ;数组的偏移地址赋给SI MOV CX,10 ;存进数组的长度给CX MOV DH,80H ;将数组的第一个数写进DHNEXT:
MOV BL,[SI] ;将数组的第一个数写进BL CMP DH,BL ;比较DH和BL中数的到校
JGE NEXT1 ;如果DH中的数大于BL中,将跳转到NEXT1 ;此为无符号数与有符号数的唯一差别,JGE是无符号数的跳转 MOV DH,BL ;如果DH中的数小于BL中,将BL中的数赋给DHNEXT1:
INC SI ;偏移地址加1
LOOP NEXT;循环,CX减1,一直到CX减为0,DH中存数组的最大值
第5页
;接下来的程序是将最大值DH在屏幕上显示输出 MOV BX,02HNEXT2:
MOV CL,4
ROL DH,CL ;将DH循环右移四位 MOV AL,DH
AND AL,0FH ;将AL高位清零,一位一位进行ASCII码转换 CMP AL,09H ;与09H比较大小
JBE NEXT3 ;若小于,跳转至NEXT3,证明数值在0-9之间
ADD AL,07H;若大于,则证明为字母,因为字母与数字的ASCII码相差7,所以要加上7NEXT3:
ADD AL,30H ;因为转换为ASCII码要加30H MOV DL,AL
MOV AH,2 ;DOS中断显示 INT 21H DEC BX JNZ NEXT2 MOV DL,'H' MOV AH,2 INT 21HCODEENDS ENDSTART实验结果
第6页
第7页
2、实验代码
DATA SEGMENT BNUMDW0500H
DNUMDB4DUP
MESDB'THEBCDOF'500H'IS:
','$'DATA ENDSCODE SEGMENT
ASSUMECS:
CODE,DS:
DATASTART:
MOV AX,DATA MOV DS,AX
MOV DX,OFFSETMES MOV AH,09H INT 21H
MOV AX,BNUM LEA BX,DNUM MOV DL,0;计算1000的个数COUNT1:
SUB AX,03E8H JC NEXT1 INC DL JMP COUNT1 NEXT1:
ADD AX,03E8H
;将字符串偏移量写入DX ;将0500H存入AX中
;取DNUM的偏移量 ;AX-1000
;不够减,即若CF=1,有借位,转NEXT1 ;DL+1
;跳转AGAIN1 ;AX+1000
第8页
MOV [BX],DL ;将DL(即千位数)存入DNUM中 INC BX ;BX+1 MOV DL,0 ;DL清零;计算100个数COUNT2:
SUB JC INC JMPNEXT2:
ADD MOV INC MOV;计算10个数COUNT3:
SUB JC INC JMPNEXT3:
ADD MOV INC MOV
AX,0064H NEXT2DLCOUNT2AX,0064H
[BX],DL BXDL,0 AX,000AH NEXT3DLCOUNT3AX,000AH
[BX],DL BX [BX],AL ;AX-100;将DL(即百位数)存入DNUM中;AX-10;将DL(十位数)存入DNUM中;计算个位数
第9页
;接下来的程序是将数值转化为ASCII并在屏幕上显示 MOV CX,4
LEA SI,DNUM ;取DNUM的地址偏移量NEXT4:
MOV AL,[SI];将DNUM中所存的各个数值转换为ASCII码;;在屏幕上输出显示
CMP AL,09H JBE NEXT5
ADD AL,07H NEXT5:
ADD AL,30H MOV DL,AL MOV AH,2 INT 21H INC SI DEC CX JNZ NEXT4 CODE ENDS END START实验结果
第10页
第11页
3、实验代码DATASEGMENT
OUPDB'THEASCIIOF7963IS:
','$' A1DB07H,09H,06H,03HDATAENDSCODESEGMENT
ASSUMECS:
CODE,DS:
DATASTART:
MOV AX,DATA MOV DS,AX
MOV DX,OFFSETOUP MOV AH,09H INT 21H MOV CL,4 MOV SI,0NEXT:
MOV AL,A1[SI];将A1的第SI个数据传给AL MOV BL,AL
OR AL,30H ;加30转换为ASCII码值 SHR AL,4
AND AL,0FH ;将右移后的高位清零
ADD AL,30H ;因为ASCII码与值之间相差30 MOV DL,AL
MOV AH,2 ;输出对应的ASCII码 INT 21H
第12页
MOV AL,BL AND AL,0FH ADD AL,30H MOV DL,AL MOV AH,02H INT 21H MOV DL,'' MOV AH,02H INT 21H INC SI LOOP NEXTEXIT:
MOV AH,4CH INT 21HCODE ENDS END START实验结果
第13页
第14页
4、实验代码
DATA SEGMENT
YIDB100DUP(88H)
ERDB100DUP(00H) ;定义数组 MESDB'THENUMBEROFCOUNTERIS:
','$'DATA ENDSCODE SEGMENT
ASSUMECS:
CODE,DS:
DATAMAIN PROCFARSTART:
MOVAX,DATA MOVDS,AX
MOVCL,100 MOVCH,00H LEASI,YI LEADI,ER NEXT:
MOVAL,[SI]
MOV[DI],AL INCSI INCDI INCCH
MOVDX,OFFSETMES MOVAH,9 INT21H
CALLCOUNT DECCL
;计数器初值
;转移次数统计,初值;将内存块1的偏移量给SI;将内存块2的偏移量给DI;将YI中的数据复制到ER中 ;显示字符串 ;调用子程序;计数减1
第15页
JNZNEXT ;计数不为零,跳转执行 HLT
MAINENDP ;主程序结束;下面是子程序,实现屏幕显示转移次数功能
COUNT PROCNEAR ;定义子程序属性 NEXT2:
NEXT3:
PUSHCX MOVDH,CHMOVBX,02H
MOVCL,4 ROLDH,CL MOVAL,DH ANDAL,0FH CMPAL,09H JBENEXT3 ADDAL,07H
ADDAL,30H MOVDL,AL
MOVAH,2 INT21HDECBXJNZNEXT2
MOVDL,'H' MOVAH,2INT21H
MOVDL,0AH ;CX进栈
;将DH循环右移四位
;将AL高位清零;与09H比较大小;若小于,跳转至NEXT3;加30H;DOS中断显示;显示H;回车
第16页
MOVAH,2 INT21H
MOVDL,0DH ;换行 MOVAH,2 INT21H
POPCX ;CX出栈 RETCOUNT ENDP;子程序结束CODE ENDS ENDSTART实验结果
第17页
第18页
5、实验代码
DATA SEGMENT
INPDB'PLEASEINPUT(a~z):
','$' ;设置字符串 OUPDB'THETRANSFORMATION(A~Z)IS:
','$'DATA ENDS CODE SEGMENT
ASSUMECS:
CODE,DS:
DATAMAIN PROCFARSTART:
MOVAX,DATA MOVDS,AX
MOVDX,OFFSETINP ;显示字符串,提示输入 MOVAH,9 INT21H
MOVAH,1 ;DOS中断调用,从键盘中读取一个字符 INT21H
PUSHAX ;AX入栈 PUSHDX
MOVDL,0DH ;中断调用,回车 MOVAH,2
INT21H
MOVDL,0AH ;中断调用,换行 MOVAH,2
INT21H
MOVDX,OFFSETOUP ;显示字符串,输出提示 MOVAH,9
第19页
INT21H
POPDX ;DX出栈 POPAX ;AX出栈 SUBAL,32;AL减去32,使大写转化为小写;大小写之间的ASCII码值相差32
MOVDL,AL ;DOS中断显示结果 MOVAH,2 INT21H MAINENDPCODE ENDS ENDSTART实验结果:
第20页
实验一 汇编语言程序设计
一、实验目的
1、掌握Lab6000p实验教学系统基本操作; 2、掌握8088/8086汇编语言的基本语法结构; 3、熟悉8088/8086汇编语言程序设计基本方法二、实验设备
装有emu8086软件的PC机三、实验内容
1、有一个10字节的数组,其值分别是80H,03H,5AH,FFH,97H,64H,BBH,7FH,0FH,D8H。
编程并显示结果:
如果数组是无符号数,求出最大值,并显示;如果数组是有符号数,求出最大值,并显示。
2、将二进制数500H转换成二-十进制码,并显示“500H的BCD是:
”3、将二-十进制码7693转换成ASCII码,并显示“BCD码7693的ASCII是:
”4、两个长度均为100的内存块,先将内存块1全部写上88H,再将内存块1的内容移至内存块2。
在移动的过程中,显示移动次数1,2,3…0AH…64H
5、键盘输入一个小写字母(a~z),转换成大写字母显示:
请输入一个小写字母(a~z):
转换后的大写字母是:
6、实现4字节无符号数加法程序,并显示结果,如99223344H+99223344H=xxxxxxxxH四、实验代码及结果、实验代码:
第1页
DATASEGMENT
SZDB80H,03H,5AH,0FFH,97H,64H,0BBH,7FH,0FH,0D8H;存进数组 SHOWDB'THEMAXIS:
','$'DATAENDSCODESEGMENT
ASSUMECS:
CODE,DS:
DATASTART:
MOV AX,DATA ;把数据的基地址赋给DS MOV DS,AX
MOV DX,OFFSETSHOW ;调用DOS显示字符串 MOV AH,09H
INT 21H
MOV SI,OFFSETSZ ;数组的偏移地址赋给SI MOV CX,10 ;存进数组的长度给CX MOV DH,80H ;将数组的第一个数写进DHNEXT:
MOV BL,[SI] ;将数组的第一个数写进BL CMP DH,BL ;比较DH和BL中数的到校 JAE NEXT1 ;如果DH中的数大于BL中,将跳转到NEXT1 MOV DH,BL;如果DH中的数小于BL中,将BL中的数赋给DHNEXT1:
INC SI ;偏移地址加1
LOOP NEXT;循环,CX自减一直到0,DH中存数组的最大值 ;接下来的程序是将将最大值DH在屏幕上显示输出 MOV BX,02H
第2页
NEXT2:
MOV CL,4
ROL DH,CL ;将DH循环右移四位 MOV AL,DH
AND AL,0FH ;将AL高位清零,一位一位进行ASCII码转换 CMP AL,09H ;与09H比较大小
JBE NEXT3 ;若小于,跳转至NEXT3,证明数值在0-9之间
ADD AL,07H;若大于,则证明为字母,因为字母与数字的ASCII码相差7,所以要加上7NEXT3:
ADD AL,30H ;因为转换为ASCII码要加30H MOV DL,AL
MOV AH,2 ;DOS中断显示 INT 21H DEC BX JNZ NEXT2 MOV DL,'H' MOV AH,2 INT 21HCODEENDS ENDSTART实验结果:
第3页
第4页
、实验代码DATASEGMENT
SZDB80H,03H,5AH,0FFH,97H,64H,0BBH,7FH,0FH,0D8H ;存进数组 SHOWDB'THEMAXIS:
','$'DATAENDSCODESEGMENT
ASSUMECS:
CODE,DS:
DATASTART:
MOV AX,DATA ;把数据的基地址赋给DS MOV DS,AX
MOV DX,OFFSETSHOW ;调用DOS显示字符串 MOV AH,09H
INT 21H
MOV SI,OFFSETSZ ;数组的偏移地址赋给SI MOV CX,10 ;存进数组的长度给CX MOV DH,80H ;将数组的第一个数写进DHNEXT:
MOV BL,[SI] ;将数组的第一个数写进BL CMP DH,BL ;比较DH和BL中数的到校
JGE NEXT1 ;如果DH中的数大于BL中,将跳转到NEXT1 ;此为无符号数与有符号数的唯一差别,JGE是无符号数的跳转 MOV DH,BL ;如果DH中的数小于BL中,将BL中的数赋给DHNEXT1:
INC SI ;偏移地址加1
LOOP NEXT;循环,CX减1,一直到CX减为0,DH中存数组的最大值
第5页