1、实验四实验四 10505038 吴逸飞吴逸飞 实验报告四 课程 微机原理 实验名称 循环和分支程序设计 第 页 专业 电子信息 班级_9 _ 学号_:105052012038_ 姓名:吴逸飞 实验日期:2014 年 3 月 29 日 报告退发(订正、重做)一、实验目的 1.进一步熟悉上机操作.2进一步熟悉 DEBUG 调试程序.3.学习循环和分支程序设计 二、实验内容.编制程序实现将一位十六进制数转化为对应 ASCII码;assume cs:code,ds:data data segment d db Input a number of hex,10,13,$f db 4,?data ends
2、 code segment start:mov ax,data mov ds,ax mov dx,offset d mov ah,9 int 21h;输出提示 mov ah,01h int 21h;输入字符 push ax mov dl,0ah mov ah,02h int 21h mov dl,0dh mov ah,02h int 21h pop ax;换行回车 mov ah,00 cmp ax,60h ja ha cmp ax,40h ja hb push ax mov dl,33h mov ah,02h int 21h pop ax mov dl,al mov ah,02h int 21
3、h jmp hc;输出 09 的 ASCII码 ha:push ax mov dl,36h mov ah,02h int 21h pop ax sub al,30h mov dl,al mov ah,02h int 21h jmp hc;输出 AF的 ASCII码 hb:push ax mov dl,34h mov ah,02h int 21h pop ax sub al,10h mov dl,al mov ah,02h int 21h jmp hc;输出 af的 ASCII码 hc:mov ah,4ch int 21h code ends end start 2.分类统计字数组中正数、负数和
4、零的个数;ASSUME CS:CODE,DS:DATA;只适合-128127 的数值符号判断 DATA SEGMENT A DB 0 B DB 0 C DB 0 D DB 1,0,-1,0,-1,0,-7,0 F DB EQUAL POSITIVE-NUMBER NEGATIVE-NUMBER$DATA ENDS CODE SEGMENT START:MOV AX,#DATA MOV DS,AX MOV SI,00H MOV CX,08H S:CMP DSI,00H JZ LA;等于零跳转 CMP DSI,80H JA LC;小于零跳转 INC B JMP LH LA:INC A JMP LH
5、 LC:INC C JMP LH LH:NOP INC SI LOOP S MOV DX,OFFSET F MOV AH,09H INT 21H MOV DL,A ADD DL,30H MOV AH,02H INT 21H MOV DL,00H MOV AH,02H INT 21H MOV DL,B ADD DL,30H MOV AH,02H INT 21H MOV DL,00H MOV AH,02H INT 21H MOV DL,C ADD DL,30H MOV AH,02H INT 21H MOV AH,4CH INT 21H CODE ENDS END START .编写码制转换程序。(
6、1)ASCII码到十进制数(BCD)的转换 若有一输入的 ASCII码串(长度在串中的第一个字节),将其中的数码取出,转换为未组合的 BCD码,放至另一缓冲区中,并统计数码串的长度,放入此缓冲区的第一个字节。ASSUME CS:CODE,DS:DATA DATA SEGMENT A DB Input a sentence consisting of 9 words$F DB The number of num:$C DW 0,0,0,0,0,0,0,0,0,0 B DB 22,?DATA ENDS CODE SEGMENT START:MOV AX,#DATA MOV DS,AX MOV DX
7、,OFFSET A MOV AH,09H INT 21H MOV DL,0AH MOV AH,02H INT 21H MOV DL,0DH MOV AH,02H INT 21H;换行回车 MOV DX,OFFSET B MOV AH,0AH INT 21H;输入 10 个字符 MOV DL,0AH MOV AH,02H INT 21H MOV DL,0DH MOV AH,02H INT 21H;换行回车 MOV CX,9 MOV SI,02H MOV DI,02H MOV DL,00H HA:CMP BSI,30H JA HB JMP HD HB:CMP BSI,39H JLE HC JMP
8、HD HC:CALL PROCE HD:INC SI LOOP HA PUSH DX MOV DX,OFFSET F MOV AH,09H INT 21H POP DX ADD DL,30H MOV AH,02H INT 21H;9个字符中数字的个数 MOV AH,4CH INT 21H PROCE:MOV AL,BSI SUB AL,30H MOV AH,03H MOV CDI,AX INC DI INC DI INC C INC DL RET CODE ENDS END START (2)将 BCD码转换为二进制 若有一个位存储单元,存放位 BCD 数,将它转换为二进制,放至另一存储单元。
9、BCD转换为二进制数,常用的有两种方法。方法 1:(千位数*10+百位数)*10+十位数)*10+个位数 ASSUME CS:CODE,DS:DATA DATA SEGMENT A DW 4321H C DW 0 DATA ENDS CODE SEGMENT START:MOV AX,#DATA MOV DS,AX MOV BX,A AND BX,0F000H MOV AX,BX MOV BX,1000H DIV BX MOV BX,0AH MUL BX PUSH AX MOV BX,A AND BX,0F00H MOV AX,BX MOV BX,100H DIV BX MOV CX,AX P
10、OP AX ADD AX,CX MOV BX,0AH MUL BX PUSH AX MOV BX,A AND BX,00F0H MOV AX,BX MOV BX,10H DIV BX MOV CX,AX POP AX ADD AX,CX MOV BX,0AH MUL BX PUSH AX MOV BX,A AND BX,000FH MOV CX,BX POP AX ADD AX,CX MOV C,AX MOV AH,4CH INT 21H CODE ENDS END START 方法 2:用千位数控制加 1000的次数,用百位数、十位数控制加 100,加 10的次数,最后与个数相加。分别用这两
11、种方法编写程序。ASSUME CS:CODE,DS:DATA DATA SEGMENT A DW 4321H B DW 0 DATA ENDS CODE SEGMENT START:MOV AX,#DATA MOV DS,AX MOV BX,A AND BX,000FH MOV CX,BX MOV AX,00H CLC LA:ADC AX,01 LOOP LA PUSH AX;个位相加 MOV BX,A AND BX,00F0H MOV AX,BX MOV BX,10H DIV BX MOV CX,AX MOV AX,0 CLC LB:ADC AX,0AH LOOP LB PUSH AX;十位
12、相加 MOV BX,A AND BX,0F00H MOV AX,BX MOV BX,100H DIV BX MOV CX,AX MOV AX,0 CLC LC:ADC AX,64H LOOP LC PUSH AX;百位相加 MOV BX,A AND BX,0F000H MOV AX,BX MOV BX,1000H DIV BX MOV CX,AX MOV AX,0 CLC LD:ADC AX,3E8H LOOP LD;千位相加 CLC MOV CX,03H HA:POP BX ADD AX,BX LOOP HA MOV B,AX MOV AH,4CH INT 21H CODE ENDS END
13、 START 4.用冒泡排序法实现数组按从大到小排序。ASSUME CS:CODE,DS:DATA DATA SEGMENT A DB 1,2,3,4,5,6,7,8 DATA ENDS CODE SEGMENT START:MOV AX,#DATA MOV DS,AX MOV DI,00H MOV CX,08H S:MOV AL,ADI PUSH CX MOV SI,DI INC SI HB:CMP AL,ASI JA HS MOV BL,ASI MOV ASI,AL MOV AL,BL MOV ADI,AL HS:INC SI LOOP HB POP CX INC DI LOOP S MOV AH,4CH INT 21H CODE ENDS END START 四、小结
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1