《负数的个数》由会员分享,可在线阅读,更多相关《负数的个数(2页珍藏版)》请在金锄头文库上搜索。
1、1 1求某数据区内负数的个数求某数据区内负数的个数STACK1 SEGMENT STACK DW 64 DUP(?) STACK1 ENDS CODE SEGMENT ASSUME CS:CODE START:MOV DI,3000H ;设数据区首址 MOV CL,DI ;送数据个数 XOR CH,CH ;CH 清 0 MOV BL,CH ;BL 清 0 INC DI ;指针指向第一个数据 A1: MOV AL,DI TEST AL,80H ;数据首位是否为 1JE A2 INC BL ;负数个数累加A2: INC DI LOOP A1 MOV DI,BL ;存结果A3: JMP A3 COD
2、E ENDS END START 输入:0000:3000 06、12、88、82、90、22、332 2修改程序 2,使其能分别求出数据区中正数、零和负数的个数。STACK1 SEGMENT STACKDW 64 DUP(?) STACK1 ENDS CODE SEGMENTASSUME CS:CODE START: MOV DI,3000H MOV CL,DI MOV BL,00H MOV BH,00H MOV DH,00H INC DI A1: MOV AL,DITEST AL,80H JZ B1INC BL JMP A3 B1: OR AL,00H JNZ A2 INC BHJMP A
3、3 A2: INC DH JMP A3 A3: INC DI LOOP A1 A4: MOV DI,BL ;负数个数MOV DI+01H,BH ;零的个数MOV DI+02H,DH ;正数个数A5: JMP A5 CODE ENDS END START 3 3设在变量单元 A、B 和 C 中存放有三个数,若三个数都不为 0,则求出三个数之和存入 D 单元中;若有一个为 0,则将其它两个单元也清 0,试编写程序。STACK1 SEGMENT STACKDW 64 DUP(?) STACK1 ENDS DATA SEGMENTA DB ?B DB?C DB?D DB? DATAENDS CODE
4、SEGMENTASSUME CS:CODE START:MOV BL ,A ;MOV CH ,B;MOV CL, C ;XOR BH,BH ;BH 清 0 A1: OR BL,00H ; 看数据是否为 0JZ A2;ADD BH,BL;OR CH,00H ; 看数据是否为 0JZ A3;ADD BH,CH;OR CL,00H ; 看数据是否为 0JZ A4;ADD BH,CL;JMP A5 A2: MOV CH,00H ;MOV CL,00H ;JMP A6 A3: MOV BL,00H ;MOV CL,00H ;JMP A6 A4: MOV BL,00H ;MOV CH,00H ;JMP A
5、6 A5: MOV D, BH;把和存入 D 单元中A6: JMP A6 CODE ENDS END START (1)输入:0000:3000 02 05 07 输出:0000:3007 0E CC CC CC CC CC CC CC (2 输入:0000:3000 02 00 07 输出:0000:3007 00 00 00 CC CC CC CC CC 实验心得:本次试验遇到的最大问题是,基本指令的使用条件不清楚,浪费许多时间。每执行一次 LOOP 指令,CX 自 动减 1。如果减 1 后 CX 不等于 0,则继续循环。而我最初设计实验时,把正数个数存在 CH,循环一直进行,得不到正 确结果,后来通过翻书才发现问题,得到改正。以后,把基础知识学扎实,基本指令使用规则弄明白,这样在运用时 才能灵活自如。