SCAU 汇编实验五

编程入门 行业动态 更新时间:2024-10-08 00:24:15

<a href=https://www.elefans.com/category/jswz/34/1752278.html style=SCAU 汇编实验五"/>

SCAU 汇编实验五

目录

  • 5.5* 试编写一程序,要求能从键盘接收一个个位数 N,然后响铃 N 次(响铃的 ASCII 码为 07)。
  • 5.6 * 编写程序,将一个包含有 20 个数据的数组 M 分成两个数组:正数数组 P 和负数数组 N, 并分别把这两个数组中数据的个数显示出来。
  • 5.7* 试编写一个汇编语言程序,求出首地址为 DATA 的 100D 字数组中的最小偶数,并把它 存放在 AX 中。
  • 5.8 把 AX 中存放的 16 位二进制数 K 看作是 8 个二进制的“四分之一字节”。试编写程序 要求数一下值为 3(即11B)的四分之一字节数,并将该数(即 11B 的个数)在终端上显示出来。
  • 5.12 有一个首地址为 MEM 的 100D 字数组,试编制程序删除数组中所有为 0 的项,并将后续项向前压缩,最后将数组的剩余部分补上 0。
  • 5.17 试编制一个程序把 AX 中的 16 进制数转换为 ASCII 码,并将对应的 ASCII 码依次存放 到 MEM 数组中的四个字节中。例如,当(AX)=2A49H 时,程序执行完后,MEM 中的 4 个 字节内容为 39H,34H,41H,32H。

5.5* 试编写一程序,要求能从键盘接收一个个位数 N,然后响铃 N 次(响铃的 ASCII 码为 07)。

算法: 最尴尬的是,程序根本没响,不知对错。仅通过编译。
代码:

DATAS SEGMENTN DB 0  ;响铃次数
DATAS ENDSSTACKS SEGMENTDB 30H DUP(0)TOP LABEL WORD
STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKS
START:MOV AX,DATASMOV DS,AXMOV AX,STACKSMOV SS,AXMOV SP,TOP;;算法核心;MOV AH,1INT 21HMOV AX,30HSUB N,AL ;数字字符转为数字XOR CX,CXMOV CL,N
L2: PUSH CXMOV CX,1000  ;延时1000MOV DL,7MOV AH,2INT 21H
DELAY: LOOP DELAYPOP CXLOOP L2;;算法核心;     MOV AH,4CHINT 21H
CODES ENDSEND START

5.6 * 编写程序,将一个包含有 20 个数据的数组 M 分成两个数组:正数数组 P 和负数数组 N, 并分别把这两个数组中数据的个数显示出来。

**算法:**有严重错误!!!不知道为什么负数识别不了
代码:

DATAS SEGMENT;MEM DW 0,0,0,-1,-2,3,14 DUP(0)MEM DW 1,2,3,1,2,3,0,0,-1LEN DW ($-MEM)/2STR1 DW 20 DUP(0)   ;非负数数组LEN1 DW 0STR2 DW 20 DUP(0)    ;负数数组LEN2 DW 0DATAS ENDSSTACKS SEGMENTDW 30H DUP(0)TOP LABEL WORD
STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKS
START:MOV AX,DATASMOV DS,AXMOV ES,AXMOV AX,STACKSMOV SS,AXMOV SP,TOP;;算法核心;;变量说明:AX指向原数组待读取的数据;          BX指向非负数数组待存放数据的单元,;          DX指向负数数组待存放数据的单元LEA SI,MEMLEA BX,STR1LEA DX,STR2MOV CX,LENCLDAGAIN:    LODSWPUSH AXMOV BP,AXMOV AX,0CMP [BP],AX;判断读取的数据是不是负数JL  L1MOV DI,BX ;非负数MOV AX,BPSTOSWMOV BX,DIADD LEN1,1JMP L2
L1: MOV DI,DX  ;负数MOV AX,BPSTOSWMOV DX,DIADD LEN2,1L2: POP AXADD AX,2  ;准备读取原数组的下一个数据LOOP AGAINMOV DX,30HADD DX,[LEN1]MOV AH,2INT 21HMOV DX,0AHMOV AH,2INT 21HMOV DX,30HADD DX,[LEN2]MOV AH,2INT 21H;DEBUG代码;MOV DX,0AHMOV AH,2INT 21HXOR CX,CXMOV CX,LEN1LEA DI,STR1
DISP:	MOV DX,30HADD DX,[DI]MOV AH,2ADD DI,2INT 21HLOOP DISP;DEBUG代码;MOV AH,4CHINT 21HCODES ENDS  END START

5.7* 试编写一个汇编语言程序,求出首地址为 DATA 的 100D 字数组中的最小偶数,并把它 存放在 AX 中。

算法: 有错误!程序直接记录了最小的数,不知道为什么奇偶判断没起作用
代码:

DATAS SEGMENTDATA DW 8,7,6,5,4,3,2,1;假设全部非负LEN DW ($-DATA)/2DATAS ENDSSTACKS SEGMENTDW 30H DUP(0)TOP LABEL WORD
STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKS
START:MOV AX,DATASMOV DS,AXMOV AX,STACKSMOV SS,AXMOV SP,TOP;;算法核心;;变量说明:AX存放最小偶数;          BX指向待比较的数 LEA BX,DATAMOV AX,0FFFFH  MOV CX,LENAGAIN:    CMP [BX],AXJA  L1   ;打擂;MOV DX,[BX];SHL DX,1MOV DX,[BX]TEST DX,1JC  L1   ;判断是否是偶数MOV AX,[BX]  ;是偶数则覆盖L1: ADD BX,2LOOP AGAINMOV DX,AXADD DX,30HMOV AH,2INT 21HMOV AH,4CHINT 21HCODES ENDS  END START

5.8 把 AX 中存放的 16 位二进制数 K 看作是 8 个二进制的“四分之一字节”。试编写程序 要求数一下值为 3(即11B)的四分之一字节数,并将该数(即 11B 的个数)在终端上显示出来。

算法:
代码:

在这里插入代码片

5.12 有一个首地址为 MEM 的 100D 字数组,试编制程序删除数组中所有为 0 的项,并将后续项向前压缩,最后将数组的剩余部分补上 0。

算法:
代码:

DATAS SEGMENTMEM DW 1,0,0,0,0,0,94 DUP(3)LEN DW ($-MEM)/2   ;数组元素个数
DATAS ENDSSTACKS SEGMENTDW 30H DUP(0)TOP LABEL WORD
STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKS
START:MOV AX,DATASMOV DS,AXMOV ES,AXMOV AX,STACKSMOV SS,AXMOV SP,TOP;;算法核心;;变量说明:SI指向待覆盖的单元,DI指向下一个待比较的非0单元LEA SI,MEMLEA DI,MEMMOV CX,LEN ;记录循环次数AGAIN:MOV AX,0CMP [DI],AXJE  L1;[DI]不为0,将其覆盖SI指向的位置;MOV AX,[DI]MOV [SI],AXADD SI,2L1: ADD DI,2LOOP AGAIN;结束复制,开始往后面填充0;
L2: CMP SI,DIJE  EXITMOV AX,0MOV [SI],AXADD SI,2JMP L2 	;后面部分是测试代码,与题目答案无关;	
EXIT:XOR CX,CXMOV CX,LENLEA DI,MEM
DISP:	MOV DX,30HADD DX,[DI]MOV AH,2ADD DI,2INT 21HLOOP DISP;为什么直接用地址判断是否结束不行呢?;;代替LOOP;;MOV AX,OFFSET LEN;CMP DI,AX;JNE EXITMOV AH,4CHINT 21HCODES ENDS  END START

5.17 试编制一个程序把 AX 中的 16 进制数转换为 ASCII 码,并将对应的 ASCII 码依次存放 到 MEM 数组中的四个字节中。例如,当(AX)=2A49H 时,程序执行完后,MEM 中的 4 个 字节内容为 39H,34H,41H,32H。

算法:
代码:

在这里插入代码片

更多推荐

SCAU 汇编实验五

本文发布于:2024-02-16 18:08:06,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1691005.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:SCAU

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!