




已阅读5页,还剩11页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
-程序sy3-1:实现从键盘输入一位数字,判断其奇偶性。并在屏幕上输出一个标志,若为奇数,则输出1;否则输出0。-如果输入的不是数字,则显示字符串“ERROR”。DATAS SEGMENT STRING DB ERROR$ ;定义字符串 FLAG DB ? ;设置奇偶标志DATAS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATASSTART: MOV AX,DATAS MOV DS,AX MOV FLAG,1 ;给标志位FLAG赋初值 MOV AH,01H INT 21H ;接收键盘输入一位数 CMP AL,30H JB ERR CMP AL,39H JA ERR TEST AL,01H ;测试,根据最后一位判断奇偶性 JNZ OUTPUT ;不为0则为奇数 MOV FLAG,0OUTPUT: MOV DL,FLAG MOV AH,02H INT 21H ;输出标志位 JMP EXITERR: ;显示字符串 MOV DX,OFFSET STRING MOV AH,9 INT 21H EXIT: MOV AH,4CH INT 21HCODES ENDSEND START;-程序sy3-2:根据用户输入的星期几数字代号(0代表星期天),在屏幕上显示相应的英文缩写名。DATAS SEGMENT s0 db Sun$ S1 DB Mon$ S2 DB Tue$ S3 DB Wed$ S4 DB Thu$ S5 DB Fri$ S6 DB Sat$ADDR_TABLE DW S0,S1,S2,S3,S4,S5,S6 ;定义地址表DATAS ENDSSTACKS SEGMENT ;此处输入堆栈段代码STACKS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKSSTART: MOV AX,DATAS MOV DS,AX MOV AH,1 INT 21H ;接受键盘输入 CMP AL,30H JB EXIT CMP AL,36H ;不是数字06,则退出程序 JA EXIT SUB AL,30H ;转变为数字 MOV BL,2 MUL BL ;数字乘以2的结果是在地址表中的相应位置的偏移值 MOV BX,AX ;将输入的数字转换为地址表中的偏移地址 MOV DX,ADDR_TABLEBX ;取地址表中的相应内容(即DX为字符串的偏移地址) MOV AH,9 INT 21H ;显示字符串 EXIT: MOV AH,4CH INT 21HCODES ENDSEND START;-SY4-1.ASM: 该程序计算1100的和并用十进制的形式在屏幕上显示出来。code segment assume cs:codestart: mov cx,100 mov ax,0 mov bx,1 s: add ax,bx ;循环累加求和 inc bx loop s mov bx,ax ;将显示bx的值 ;-下面程序段的功能是以十进制形式显示BX的内容 MOV SI,10000 ;因为BX65536,循环处理5次 MOV CX,5ROTATE: MOV AX,BX MOV DX,0 ;被除数送(DX,AX) DIV SI ;除数 MOV BX,DX ;余数要作为下一步的被除数 MOV DL,AL ADD DL,30H MOV AH,2 ;显示商(即对应位上的数字) INT 21H MOV AX,SI MOV DX,0 MOV DI,10 DIV DI ;把除数除以10后的商作为下一步的除数 MOV SI,AX ;改变除数 LOOP ROTATE mov ah,4ch int 21h ;返回DOScode endsend start ;-该程序判断两个字符串是否匹配,并在屏幕上显示结果。DATA SEGMENTSTRING1 DB Move the cursor Backward.STRING2 DB Move the cursor backward.MESS1 DB Mactch.,13,10,$MESS2 DB No match!,13,10,$DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV SI,-1 ;SI要记录不匹配的位置 MOV CX,25 S: INC SI MOV AL,STRING1SI CMP AL,STRING2SI ;循环比较 LOOPZ S JZ MATCH ;相等则匹配 LEA DX,MESS2 JMP DISP MATCH: LEA DX,MESS1 DISP: MOV AH,9 INT 21H ;显示字符串 MOV AH,4CH INT 21H CODE ENDSEND START;-该程序判断两个字符串是否匹配,并在屏幕上显示结果。DATA SEGMENTSTRING1 DB Move the cursor Backward.STRING2 DB Move the cursor Backward.MESS1 DB Mactch.,13,10,$MESS2 DB No match!,13,10,$DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX ;源串段地址 MOV ES,AX ;目的串段地址 MOV SI,OFFSET STRING1 ;源串偏移地址 MOV DI,OFFSET STRING2 ;目的串偏移地址 MOV CX,25 ;串长度 CLD ;方向标志位 REPZ CMPSB ;相等则重复比较,遇到不相等的则退出 JZ MATCH ;如果退出串比较后,zf=1表示整个字符串都比较完了都相等则匹配 LEA DX,MESS2 JMP DISP MATCH: LEA DX,MESS1 DISP: MOV AH,9 INT 21H ;显示字符串 MOV AH,4CH INT 21H CODE ENDSEND START;-该程序实现找到10个学生成绩数组中最大值并在屏幕上显示;-统计小于60的个数,即不及格的人数并显示。;-计算数组平均值(取整数部分,即平均成绩)并显示 DATAS SEGMENT GRADE DB 76,68,54,80,45,92,63,58,94,85 STR1 DB The highest score:$ STR2 DB the number of failing:$ STR3 DB average:$DATAS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATASSTART: MOV AX,DATAS MOV DS,AX MOV SI,0 MOV DX,OFFSET STR1 CALL OUTSTR CALL MAXS ;调用比较找最大值 MOV BX,0 MOV BL,AL ;将最大值送BX CALL BINIDEC ;调用二进制转十进制输出BX CALL CRLF ;调用显示回车换行 MOV DX,OFFSET STR2 CALL OUTSTR CALL BJG ;调用统计不及格人数 MOV BH,0 CALL BINIDEC ;以十进制显示不及格人数 CALL CRLF MOV DX,OFFSET STR3 CALL OUTSTR CALL AVG ;调用求平均值 MOV BX,0 MOV BL,AL ;将平均值送BX CALL BINIDEC ;以十进制显示平均值 MOV AH,4CH INT 21H;-子程序OUTSTR:显示字符串。OUTSTR PROC NEAR MOV AH,9 INT 21H RETOUTSTR ENDP;-子程序AVG:求数组平均值,出口参数为AL。AVG PROC NEAR MOV AX,0 MOV SI,0 MOV CX,10 S: ADD AL,GRADESI ADC AH,0 INC SI LOOP S MOV BL,10 DIV BL RETAVG ENDP ;-子程序BJG: 统计不及格人数,出口参数为BL。 BJG PROC NEAR MOV CX,10 MOV AL,60 MOV BX,0COM: CMP AL,GRADESI JlE NEXT INC BXNEXT:INC SI LOOP COM RETBJG ENDP ;-子程序MAXS:通过比较找到最大值,出口参数为AL。MAXS PROC NEARMOV SI,0MOV CX,9 ;设置比较次数MOV Al,GRADESI LOOP1:INC SICMP GRADESI,ALJBE CONTINIU1MOV AL,GRADESI ;保存大值CONTINIU1: LOOP LOOP1 RETMAXS ENDP;-子程序将bx的内容转换为十进制输出到屏幕BINIDEC PROC NEAR MOV SI,10000 ;BX65536,循环处理5次 MOV CX,5ROTATE: MOV AX,BX MOV DX,0 ;被除数送(DX,AX) DIV SI ;除数 MOV BX,DX ;余数要作为下一步的被除数 MOV DL,AL ADD DL,30H MOV AH,2 ;显示商(即对应位上的数字) INT 21H MOV AX,SI MOV DX,0 MOV DI,10 DIV DI ;把除数除以10后的商作为下一步的除数 MOV SI,AX ;改变除数 LOOP ROTATE RETBINIDEC ENDP;-显示回车换行CRLF PROC NEAR PUSH AX PUSH DX MOV AH,2 MOV DL,0DH INT 21H MOV DL,0AH INT 21H POP DX POP AX RET CRLF ENDPCODES ENDSEND START;-程序功能:输入表达式,实现500以内的十进制数的加减运算;-定义宏:显示以$结束的字符串outstring macro mes mov dx, offset mes mov ah,9 int 21h endm ;-设置提示符 DATAS SEGMENT mes1 db please input the first operand:$ mes2 db please input the second operand:$ mes3 db please input the operator:$ mes4 db output the Calculated Results:$ mes5 db first Data of more than 500, please enter again!$ mes6 db second Data of more than 500, please enter again!$ mes7 db Operator input error, please enter again!$DATAS ENDSSTACK SEGMENTDW 50 DUP (0)TOS LABEL WORDSTACK ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKSTART: MOV AX,DATAS MOV DS,AX MOV AX,STACK MOV SS,AX MOV SP,OFFSET TOS s1: outstring mes1 ;输出提示菜单 call decibin ;接收键盘十进制输入,以任意非十进制数码结束输入 cmp bx,500 ja err1 ;控制操作数不大于500 push bx call crlf ;换行 jmp s2err1: call crlf outstring mes5 ;输出错误提示 call crlf jmp s1 s2: outstring mes2 call decibin cmp bx,500 ja err2 push bx call crlf jmp s3err2: call crlf outstring mes6 call crlf jmp s2 s3:outstring mes3 mov ah,1 ;输入操作符 int 21h mov bl,al cmp bl, + jne c1 pop ax pop bx add bx,ax ;做加法 call crlf outstring mes4 jmp disp c1:cmp bl,- jne err call crlf outstring mes4 pop ax pop bx sub bx,ax ;做减法 jns disp mov dl,- mov ah,2 int 21h ;输出负号 neg bx ;求绝对值disp: call binidec ;显示运算结果 jmp quit err: call crlf outstring mes7 ;操作符错误提示 call crlf jmp s3 quit: MOV AH,4CH INT 21H ;- decibin proc near mov bx, 0newchar: mov ah, 1 int 21h sub al, 30h jl exit cmp al, 9 jg exit cbw xchg ax, bx mov cx, 10 mul cx add bx, ax jmp newchar exit: retdecibin endp;- binidec proc near cmp bx,10000d jae div1 cmp bx,1000d jae div2 cmp bx,100d jae div3 cmp bx,10d jae div4 jmp div5 div1: mov cx, 10000d call dec_div div2: mov cx, 1000d call dec_div div3: mov cx, 100d call dec_div div4: mov cx, 10d call dec_div div5: mov cx, 1d call dec_div retbinidec endp;-dec_div proc near mov ax, bx mov dx, 0 div cx mov bx, dx mov dl, al add dl, 30h mov ah, 2 int 21h retdec_div endp;- crlf proc near mov dl,13 mov ah,2 int 21h mov dl,10 mov ah,2 int 21h ret crlf endp ;-CODES ENDSEND START;-程序功能:采用位触发方式控制扬声器发声。CODES SEGMENT ASSUME CS:CODESSTART: MOV AX,DATAS MOV DS,AX MOV CX,3000 ;设置入口参数 MOV BX,1000 call sound ;调用发声子程序 MOV AH,4CH INT 21H ;-发声子程序sound:采用位触发方式控制扬声器发声。 ;-入口参数:(BX)=控制音频 ,(CX)=控制音长sound proc near push ax push bx push cx push dx mov dx,cx ;dx控制音长 in al,61h and al,0fch ;将0、1号位清0trig: xor al,2 out 61h,al mov cx,bx ;cx控制音频delay: loop delay dec dx jne trig pop dx pop cx pop bx pop ax retsound endpCODES ENDSEND START;-通用发声子程序GENSOUND,入口参数(DI)=指定声音的频率 GENSOUND PROC FAR PUSH AX PUSHCX PUSHDX PUSHDI MOVAL,0B6H ;向8253-5/8254-2计数器2写控制字OUT43H,AL ;方式3、双字节写和二进制计数方式写到控制口MOVDX,12H ;设置被除数(DX:AX)=1193181.7HzMOVAX,348CHDIVDI ;其商(AX)为预置值OUT42H,AL ;先送低字节 MOVAL,AHOUT42H,AL ;后送高字节INAL,61H ;读8255端口B(61H)原值MOVAH,AL ;保存端口原值ORAL,3 ;置61H端口的0、1号为都为1OUT61H,AL ;接通扬声器WAIT1: MOV CX,633 ;等待10ms CALL WAITF ;调用延时15.08usDECBX ;入口参数(BX)=循环次数JNZWAIT1 ;音长=BX*10ms(若全音符的BX为8*100,则音长为8s) MOVAL,AH ;写回61H口原值,关闭扬声器 OUT61H,AL POPDI ;恢复寄存器 POPDX PO
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 商业零售店租赁经营合同协议
- 酒店管理与服务合同协议书
- 广东自考考试试卷及答案
- 2025年新疆特色果树制种合同
- 2025年新材料研发行纪合同协议书
- 2025年轨道交通信号工(高级技师)资格考试题库(带答案)
- 2025年广西专业技术人员继续教育公需科目科目考试及答案
- 护理部礼仪考试题及答案
- 客户服务响应流程优化管理工具
- 入团笔试题型及答案大全
- 腹直肌分离康复(产后康复课件PPT)
- 聚合物成型的理论基础课件
- 药监系统官方培训06细菌内毒素方法介绍-蔡彤
- 慢性中耳炎的并发症课件
- 灭火器每月定期检查及记录(卡)表
- 千米、分米和毫米的认识单元备课
- 药品生产质量管理工程完整版课件
- 人工智能(AI)在人力资源领域的应用与展望
- GB∕T 29169-2012 石油天然气工业 在用钻柱构件的检验和分级
- 重大医疗事件报告及处理制度
- 公铁两用大桥连续刚构专项施工测量实施方案
评论
0/150
提交评论