《2022年2022年汇编小程序 .pdf》由会员分享,可在线阅读,更多相关《2022年2022年汇编小程序 .pdf(16页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、-程序sy3-1:实现从键盘输入一位数字,判断其奇偶性。并在屏幕上输出一个标志,若为奇数,则输出1;否则输出0。-如果输入的不是数字,则显示字符串“ERROR ” 。DATAS SEGMENT STRING DB ERROR$ ;定义字符串FLAG DB ? ;设置奇偶标志DATAS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS START: MOV AX,DATAS MOV DS,AX MOV FLAG,1 ;给标志位FLAG赋初值MOV AH,01H INT 21H ;接收键盘输入一位数CMP AL,30H JB ERR CMP AL,39H JA
2、 ERR TEST AL,01H ;测试,根据最后一位判断奇偶性JNZ OUTPUT ;不为 0 则为奇数MOV FLAG,0 OUTPUT: MOV DL,FLAG MOV AH,02H INT 21H ;输出标志位JMP EXIT ERR: ;显示字符串MOV DX,OFFSET STRING MOV AH,9 INT 21H EXIT: MOV AH,4CH INT 21H CODES ENDS END START 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 1
3、6 页 - - - - - - - - - ;-程序 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 ENDS STACKS SEGMENT ;此处输入堆栈段代码STACKS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACK
4、S START: 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 21H CODES ENDS EN
5、D START 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 16 页 - - - - - - - - - ;-SY4-1.ASM: 该程序计算1100 的和并用十进制的形式在屏幕上显示出来。code segment assume cs:code start: mov cx,100 mov ax,0 mov bx,1 s: add ax,bx ;循环累加求和inc bx loop s mov bx,ax ;将显示 bx 的值;-下面程序段的功能是以十进制形式显示BX的内
6、容MOV SI,10000 ;因为 BX65536,循环处理5 次MOV CX,5 ROTATE: 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 ;返回 DOS code ends end start 名师资
7、料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 16 页 - - - - - - - - - ;- 该程序判断两个字符串是否匹配,并在屏幕上显示结果。DATA SEGMENT STRING1 DB Move the cursor Backward. STRING2 DB Move the cursor backward. MESS1 DB Mactch.,13,10,$ MESS2 DB No match!,13,10,$ DATA ENDS CODE SEGMENT ASSU
8、ME 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 ENDS END START 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - -
9、 - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 16 页 - - - - - - - - - ;- 该程序判断两个字符串是否匹配,并在屏幕上显示结果。DATA SEGMENT STRING1 DB Move the cursor Backward. STRING2 DB Move the cursor Backward. MESS1 DB Mactch.,13,10,$ MESS2 DB No match!,13,10,$ DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DA
10、TA 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 ENDS END START
11、;-该程序实现找到10 个学生成绩数组中最大值并在屏幕上显示;-统计小于60 的个数,即不及格的人数并显示。;-计算数组平均值(取整数部分,即平均成绩)并显示DATAS SEGMENT 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 16 页 - - - - - - - - - GRADE DB 76,68,54,80,45,92,63,58,94,85 STR1 DB The highest score:$ STR2 DB the number of failing:$
12、 STR3 DB average:$ DATAS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS START: 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 BIN
13、IDEC ;以十进制显示不及格人数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 RET OUTSTR ENDP ;-子程序 AVG:求数组平均值,出口参数为AL。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心
14、整理 - - - - - - - 第 6 页,共 16 页 - - - - - - - - - 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 RET AVG ENDP ;-子程序 BJG: 统计不及格人数,出口参数为BL。BJG PROC NEAR MOV CX,10 MOV AL,60 MOV BX,0 COM: CMP AL,GRADESI JlE NEXT INC BX NEXT:INC SI LOOP COM RET BJG ENDP
15、 ;-子程序 MAXS:通过比较找到最大值,出口参数为AL。MAXS PROC NEAR MOV SI,0 MOV CX,9 ;设置比较次数MOV Al,GRADESI LOOP1: INC SI CMP GRADESI,AL JBE CONTINIU1 MOV AL,GRADESI ;保存大值CONTINIU1: LOOP LOOP1 RET MAXS ENDP 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 16 页 - - - - - - - - - ;-子程序将b
16、x 的内容转换为十进制输出到屏幕BINIDEC PROC NEAR MOV SI,10000 ;BX65536,循环处理5 次MOV CX,5 ROTATE: 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 RET BINIDEC ENDP ;-显
17、示回车换行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 ENDP CODES ENDS END START ;-程序功能:输入表达式,实现500 以内的十进制数的加减运算;-定义宏:显示以$结束的字符串outstring macro mes mov dx, offset mes mov ah,9 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - -
18、 - - 第 8 页,共 16 页 - - - - - - - - - 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 secon
19、d Data of more than 500, please enter again!$ mes7 db Operator input error, please enter again!$ DATAS ENDS STACK SEGMENT DW 50 DUP (0) TOS LABEL WORD STACK ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACK START: MOV AX,DATAS MOV DS,AX MOV AX,STACK MOV SS,AX MOV SP ,OFFSET TOS s1: outstring mes1
20、 ;输出提示菜单call decibin ;接收键盘十进制输入,以任意非十进制数码结束输入cmp bx,500 ja err1 ;控制操作数不大于500 push bx call crlf ;换行jmp s2 err1: call crlf outstring mes5 ;输出错误提示call crlf jmp s1 s2: outstring mes2 call decibin cmp bx,500 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 16 页 - - -
21、- - - - - - ja err2 push bx call crlf jmp s3 err2: 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
22、disp mov dl,- mov ah,2 int 21h ;输出负号neg bx ;求绝对值disp: call binidec ;显示运算结果jmp quit err: call crlf outstring mes7 ;操作符错误提示call crlf 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 16 页 - - - - - - - - - jmp s3 quit: MOV AH,4CH INT 21H ;- decibin proc near mov bx
23、, 0 newchar: 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: ret decibin 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 d
24、iv2: mov cx, 1000d call dec_div div3: mov cx, 100d call dec_div div4: mov cx, 10d call dec_div 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 16 页 - - - - - - - - - div5: mov cx, 1d call dec_div ret binidec endp ;- dec_div proc near mov ax, bx mov dx, 0 div cx
25、 mov bx, dx mov dl, al add dl, 30h mov ah, 2 int 21h ret dec_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 ENDS END START ;-程序功能:采用位触发方式控制扬声器发声。CODES SEGMENT ASSUME CS:CODES START: MOV AX,DATAS MOV DS,AX MOV CX,3000 ;设置入口参数MOV BX,1000 call so
26、und ;调用发声子程序名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 16 页 - - - - - - - - - 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 号位清 0
27、trig: 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 ret sound endp CODES ENDS END START ;-通用发声子程序GENSOUND, 入口参数( DI)=指定声音的频率GENSOUND PROC FAR PUSH AX PUSH CX PUSH DX PUSH DI MOV AL,0B6H ;向 8253-5/8254-2 计数器 2 写控制字OUT 43H,AL ;方式 3、双字节写和二进制计数方式写到控制
28、口名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 13 页,共 16 页 - - - - - - - - - MOV DX,12H ;设置被除数 (DX:AX)=1193181.7Hz MOV AX,348CH DIV DI ;其商( AX)为预置值OUT 42H,AL ;先送低字节MOV AL,AH OUT 42H,AL ;后送高字节IN AL,61H ;读 8255 端口 B(61H)原值MOV AH,AL ;保存端口原值OR AL,3 ;置 61H 端口的 0、 1 号为都为1
29、 OUT 61H,AL ;接通扬声器WAIT1: MOV CX,633 ;等待 10ms CALL WAITF ;调用延时15.08us DEC BX ;入口参数( BX )=循环次数JNZ WAIT1 ;音长 =BX*10ms(若全音符的BX 为 8*100 ,则音长为 8s) MOV AL,AH ;写回 61H 口原值,关闭扬声器OUT 61H,AL POP DI ;恢复寄存器POP DX POP CX POP AX RET ;子程序结束返回GENSOUND ENDP ;-下面是利用端口61h 的 PB4延时 15.08us 子程序 waitf ;-入口参数为CX ,必须装入15.08us
30、 的倍数 ,比如 (CX)=633,则达到延时10ms waitf proc near push ax waitf1: in al, 61h and al, 10h cmp al, ah je waitf1 mov ah, al loop waitf1 pop ax 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 14 页,共 16 页 - - - - - - - - - ret waitf endp ;-程序的功能:通过读取显示CMOS RAM中的时间信息以“hh:mm:ss”的格
31、式显示时间。DATAS SEGMENT date db 0,0,:,0,0,:,0,0,$ DATAS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS START: MOV AX,DATAS MOV DS,AX mov bx,0 ;指向内存mov dl,4 ;存放时分秒在CMOS RAM的地址mov cx,3 ;循环次数s: push cx mov al,dl out 70h,al in al,71h ;读年份信息mov ah,al ;al 中为从 CMOS RAM的 8 号单元读出的数据mov cl,4 shr ah,cl ;ah 中为月份的十位数码值
32、and al,00001111b ;ah 中为月份的个位数码值add ah,30h ;ah 中为月份的十位数SACII码add al,30h ;ah 中为月份的个位数SACII码mov datebx,ah mov datebx+1,al add bx,3 sub dl,2 pop cx loop s lea dx, date 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 15 页,共 16 页 - - - - - - - - - mov ah,9 int 21h ;输出字符串MOV Ax,4C00H INT 21H CODES ENDS END START 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 16 页,共 16 页 - - - - - - - - -