汇编小程序.docx

上传人:sk****8 文档编号:3009913 上传时间:2019-05-17 格式:DOCX 页数:16 大小:20.95KB
下载 相关 举报
汇编小程序.docx_第1页
第1页 / 共16页
汇编小程序.docx_第2页
第2页 / 共16页
汇编小程序.docx_第3页
第3页 / 共16页
汇编小程序.docx_第4页
第4页 / 共16页
汇编小程序.docx_第5页
第5页 / 共16页
点击查看更多>>
资源描述

1、-程序 sy3-1:实现从键盘输入一位数字,判断其奇偶性。并在屏幕上输出一个标志,若为奇数,则输出 1;否则输出 0。-如果输入的不是数字,则显示字符串“ERROR” 。DATAS SEGMENTSTRING DB “ERROR$“ ;定义字符串FLAG DB ? ;设置奇偶标志DATAS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATASSTART:MOV AX,DATASMOV DS,AXMOV FLAG,1 ;给标志位 FLAG 赋初值MOV AH,01HINT 21H ;接收键盘输入一位数CMP AL,30HJB ERRCMP AL,39HJA ERRT

2、EST AL,01H ;测试,根据最后一位判断奇偶性JNZ OUTPUT ;不为 0 则为奇数MOV FLAG,0OUTPUT: MOV DL,FLAGMOV AH,02HINT 21H ;输出标志位JMP EXITERR: ;显示字符串 MOV DX,OFFSET STRINGMOV AH,9INT 21H EXIT: MOV AH,4CHINT 21HCODES ENDSEND START;-程序 sy3-2:根据用户输入的星期几数字代号(0 代表星期天) ,在屏幕上显示相应的英文缩写名。DATAS SEGMENTs0 db “Sun$“S1 DB “Mon$“S2 DB “Tue$“S3

3、 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 SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKSSTART:MOV AX,DATASMOV DS,AXMOV AH,1INT 21H ;接受键盘输入CMP AL,30HJB EXITCMP AL,36H ;不是数字 06,则退出程序JA EXIT SUB AL,30H ;转变为数字MOV

4、BL,2MUL BL ;数字乘以 2 的结果是在地址表中的相应位置的偏移值MOV BX,AX ;将输入的数字转换为地址表中的偏移地址MOV DX,ADDR_TABLEBX ;取地址表中的相应内容(即 DX 为字符串的偏移地址)MOV AH,9INT 21H ;显示字符串EXIT:MOV AH,4CHINT 21HCODES ENDSEND START;-SY4-1.ASM: 该程序计算 1100 的和并用十进制的形式在屏幕上显示出来。code segmentassume cs:codestart: mov cx,100mov ax,0mov bx,1s:add ax,bx ;循环累加求和inc

5、 bxloop smov bx,ax ;将显示 bx 的值;-下面程序段的功能是以十进制形式显示 BX 的内容MOV SI,10000 ;因为 BX65536,循环处理 5 次MOV CX,5ROTATE:MOV AX,BXMOV DX,0 ;被除数送(DX ,AX )DIV SI ;除数MOV BX,DX ;余数要作为下一步的被除数MOV DL,ALADD DL,30HMOV AH,2 ;显示商(即对应位上的数字)INT 21HMOV AX,SI MOV DX,0MOV DI,10DIV DI ;把除数除以 10 后的商作为下一步的除数MOV SI,AX ;改变除数LOOP ROTATEmo

6、v ah,4chint 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:DATASTART: MOV AX,DATAMOV DS,AXMOV SI,-1 ;SI 要记录不匹配的位置MOV

7、 CX,25S: INC SIMOV AL,STRING1SICMP AL,STRING2SI ;循环比较LOOPZ SJZ MATCH ;相等则匹配LEA DX,MESS2 JMP DISPMATCH:LEA DX,MESS1DISP: MOV AH,9INT 21H ;显示字符串MOV AH,4CHINT 21HCODE ENDSEND START;-该程序判断两个字符串是否匹配,并在屏幕上显示结果。DATA SEGMENTSTRING1 DB Move the cursor Backward.STRING2 DB Move the cursor Backward.MESS1 DB Mac

8、tch.,13,10,$MESS2 DB No match!,13,10,$DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV 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

9、JMP DISPMATCH:LEA DX,MESS1DISP: MOV AH,9INT 21H ;显示字符串MOV AH,4CHINT 21HCODE ENDSEND START;-该程序实现找到 10 个学生成绩数组中最大值并在屏幕上显示;-统计小于 60 的个数,即不及格的人数并显示。;-计算数组平均值(取整数部分,即平均成绩)并显示 DATAS SEGMENTGRADE DB 76,68,54,80,45,92,63,58,94,85STR1 DB “The highest score:$“STR2 DB “the number of failing:$“STR3 DB “average

10、:$“DATAS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATASSTART:MOV AX,DATASMOV DS,AXMOV SI,0MOV DX,OFFSET STR1CALL OUTSTRCALL MAXS ;调用比较找最大值MOV BX,0 MOV BL,AL ;将最大值送 BXCALL BINIDEC ;调用二进制转十进制输出 BXCALL CRLF ;调用显示回车换行MOV DX,OFFSET STR2CALL OUTSTRCALL BJG ;调用统计不及格人数MOV BH,0CALL BINIDEC ;以十进制显示不及格人数CALL CRLFMO

11、V DX,OFFSET STR3CALL OUTSTRCALL AVG ;调用求平均值MOV BX,0 MOV BL,AL ;将平均值送 BXCALL BINIDEC ;以十进制显示平均值MOV AH,4CHINT 21H;-子程序 OUTSTR:显示字符串。OUTSTR PROC NEARMOV AH,9INT 21HRETOUTSTR ENDP;-子程序 AVG:求数组平均值, 出口参数为 AL。AVG PROC NEARMOV AX,0MOV SI,0MOV CX,10S: ADD AL,GRADESIADC AH,0INC SILOOP SMOV BL,10DIV BLRETAVG E

12、NDP ;-子程序 BJG: 统计不及格人数,出口参数为 BL。BJG PROC NEARMOV CX,10MOV AL,60MOV BX,0COM:CMP AL,GRADESIJlE NEXTINC BXNEXT:INC SILOOP 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 LOOP1RE

13、TMAXS ENDP;-子程序将 bx 的内容转换为十进制输出到屏幕BINIDEC PROC NEARMOV SI,10000 ;BX65536,循环处理 5 次MOV CX,5ROTATE:MOV AX,BXMOV DX,0 ;被除数送(DX ,AX )DIV SI ;除数MOV BX,DX ;余数要作为下一步的被除数MOV DL,ALADD DL,30HMOV AH,2 ;显示商(即对应位上的数字)INT 21HMOV AX,SI MOV DX,0MOV DI,10DIV DI ;把除数除以 10 后的商作为下一步的除数MOV SI,AX ;改变除数LOOP ROTATERETBINIDE

14、C ENDP;-显示回车换行CRLF PROC NEARPUSH AXPUSH DXMOV AH,2MOV DL,0DHINT 21HMOV DL,0AHINT 21HPOP DXPOP AXRETCRLF ENDPCODES ENDSEND START;-程序功能:输入表达式,实现 500 以内的十进制数的加减运算;-定义宏:显示以$结束的字符串outstring macro mesmov dx, offset mesmov ah,9int 21h endm ;-设置提示符 DATAS SEGMENTmes1 db please input the first operand:$mes2 d

15、b 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

16、 50 DUP (0)TOS LABEL WORDSTACK ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKSTART:MOV AX,DATASMOV DS,AXMOV AX,STACKMOV SS,AXMOV SP,OFFSET TOSs1: outstring mes1 ;输出提示菜单call decibin ;接收键盘十进制输入,以任意非十进制数码结束输入cmp bx,500ja err1 ;控制操作数不大于 500 push bxcall crlf ;换行jmp s2err1:call crlfoutstring mes5 ;输出错

17、误提示call crlfjmp s1 s2: outstring mes2call decibincmp bx,500ja err2 push bxcall crlfjmp s3err2:call crlfoutstring mes6call crlfjmp s2 s3:outstring mes3mov ah,1 ;输入操作符int 21h mov bl,alcmp bl, + jne c1 pop axpop bxadd bx,ax ;做加法 call crlf outstring mes4 jmp dispc1:cmp bl,-jne err call crlf outstring mes4 pop axpop bxsub bx,ax ;做减法jns dispmov dl,-mov ah,2int 21h ;输出负号neg bx ;求绝对值disp: call binidec ;显示运算结果jmp quit err:call crlfoutstring mes7 ;操作符错误提示

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 重点行业资料库 > 建筑建材

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。