1、华南理工大学物流工程汇编语言实验报告华南理工大学计算机原理与汇编语言课程实验报告姓名: 学号: 班级: 物流工程(2)班 组别: 合作者: 指导教师: 实验题目1:先让用户输入一个字符串,再让用户输入一个字母。输出这个字母在该字符串中出现的次数,再输出首次出现的位置(下标,首个字符的下标为0)。实验概述【实验目的及要求】实验目的: 熟悉数组的使用,数组的遍历与数组单元的比较与统计。实验要求:提示用户输入字符串,再提示用户输入一个字符,统计在之前输入的字符串中该字符出现次数和第一次出现的位置。【实验环境】操作系统:Windows XP实验内容【程序源代码及注释】CODES SEGMENT ASS
2、UME CS:CODES ORG 100HSTART: JMP BEGIN MSG1 DB please input a string: ,$ MSG2 DB please input a char: ,$ LFCR DB 13,10,$ STRING1 DB 255,?,255 DUP(?) CHAR1 DB ? COUNT DB 0 POS DB 0BEGIN: PUSH CS POP DS PUSH CS POP ES LEA DX,MSG1 MOV AH,9 INT 21H LEA DX,STRING1 MOV AH,10 INT 21H LEA DX,LFCR MOV AH,9 IN
3、T 21H LEA DX,MSG2 INT 21H MOV AH,1 INT 21H MOV CHAR1,AL LEA DX,LFCR MOV AH,9 INT 21H MOV CL,STRING1+1 MOV CH,0 LEA SI,STRING1+2 MOV BYTE PTR COUNT,0 MOV BYTE PTR POS,0 MOV BL,0 CLD A: LODSB INC BL CMP AL,CHAR1 JNE B INC BYTE PTR COUNT CMP BYTE PTR COUNT,1 JNE B MOV POS,BL B: LOOP A MOV DL,COUNT ADD
4、DL,30H MOV AH,2 INT 21H MOV DL, INT 21H MOV DL,POS ADD DL,30H INT 21H MOV AH,4CH INT 21HCODES ENDS END START小结遍历数组,将数组元素和查找的字符进行比较,记录第一次出现时的下标。记录遍历完数组后,查找的赐福出现的次数。实验题目2:循环接收用户按键输入,将用户输入的大字母原样输出,将用户输入的小写字母转换为大写字母再输出,用户若输入数字0则退出程序,其它情况输出“error!”。实验概述【实验目的及要求】实验目的: 熟悉汇编语言的输入输出,以及ASCLL码的使用实验要求:输入A-Z,相应输
5、出A-Z输入a-z,相应输出A-Z输入其他,返回error!输入0,退出程序。【实验环境】操作系统:Windows XP实验内容【程序源代码及注释】DATAS SEGMENT STRING DB ERROR!$ X DB ?; DATAS ENDSSTACKS SEGMENT DW 128 DUP (?);STACKS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKSSTART :MOV AX,DATAS MOV DS,AXAGAIN :MOV AH,01H INT 21H CMP AL,0 JE NEXT CMP AL,A JB ERR
6、OR ;小于A的出错 CMP AL,Z JBE PRINT1 ;在A,Z之间的输出PRINT1 CMP AL,a JB ERROR ;在Z(41HH)和a(61H)之间的出错 CMP AL,z JBE PRINT2 ;在a,z之间的输出PRINT2 JMP ERRORPRINT1:MOV DL,AL MOV AH,02H INT 21H JMP AGAIN ;循环输入,AGAIN PRINT2:MOV DL,AL SUB DL,20H MOV AH,02H INT 21H JMP AGAIN ;循环输入,AGAIN ERROR :MOV DX,OFFSET STRING MOV AH,09H
7、INT 21H JMP AGAIN;NEXT :MOV AH,4CH INT 21HCODES ENDS END START小结输入字符,判断字符的ASCII码,从低向高,比较字符。小于A,A-Z,Z-a,a-z,大于z。分别输出对应的字符。实验题目3:从键盘接收用户输入的一个正整数(0-32767之间),输出该数字的所有因子。实验概述【实验目的及要求】实验目的: 熟悉汇编语言中各种命令的使用。实验要求:用户从键盘输入一个0-32767之间的正整数,程序输出该数字的所有因子。【实验环境】操作系统:Windows XP实验内容【程序源代码及注释】stack segment para stackd
8、w 40h dup(?)stack endsdata segmentstring db 请输入一个整数,按回车键结束x dw 0000hy db 01hz db ?p dw 0000hr dw 000ahq dw 0000hdata endscode segmentassume ds:data,cs:codestart: mov q,sp mov dx,offset string mov ah,09h int 21hnewchar:mov ah,1 int 21h cmp al,0dh jz list1 mov ah,00h push ax jmp newchar list1:pop ax m
9、ov bl,y mov z,bl sub al,30h quan:mul r sub z,01h cmp z,00h jg quan div r add x,ax add y,01h cmp sp,q jl list1 list2:mov ax,x cmp p,ax jg exit mov dx,0000h mov p,0001h div p cmp dx,0000h jg list5 mov ax,p list3:mov dx,0000h div r push dx cmp ax 0000h jg list3 list4:pop ax add al,30h mov dl,al mov ah,
10、02h int 21h cmp sp,q jl list4 mov al,20h mov dl,al mov ah,02h int 21h list5:add p,0001h jmp list2 exit:mov ax,4c00h int 21h code ends end start小结实验题目4: 编写主程序,调用input接收用户输入数据,再调用binout、decout、hexout将数据以二、十、十六进制输出显示。实验概述【实验目的及要求】实验目的: 熟悉汇编语言中函数的编写,函数的调用。以及堆栈的使用。实验要求:编写三个函数:1、函数input:接收用户一个正整数,将数据保存到AX
11、2、函数binout:将AX中的数据以二进制在屏幕上显示出来3、函数decout: 将AX中的数据以十进制在屏幕上显示出来4、函数hexout: 将AX中的数据以十六进制在屏幕上显示出来编写主程序,调用input接收用户输入数据,再调用binout、decout、hexout将数据以二、十、十六进制输出显示。【实验环境】操作系统:Windows XP实验内容【程序源代码及注释】data segmentten dw 10buf db 20 dup(?)data endsstack segment para stackdw 50 dup(?)stack endscode segment assum
12、e cs:code,ds:datastart: mov ax,data mov ds,ax call inputint mov dl,0dh mov ah,02h int 21h mov dl,0ah mov ah,02h int 21h call binout mov dl,0dh mov ah,02h int 21h mov dl,0ah mov ah,02h int 21h call printint mov dl,0dh mov ah,02h int 21h mov dl,0ah mov ah,02h int 21h call hexout mov ah,4ch int 21hbino
13、ut proc push cx push bx push dx push ax mov cx,16a3:shl bx,1 jc a1 mov dl,0 jmp a2a1:mov dl,1a2:mov ah,02h int 21h loop a3 pop ax pop dx pop bx pop cx retbinout endpinputint proc near ; push cx push ax push dx pushf mov bx,0 mov cx,0 ll2: mov ah,01h int 21h cmp al,0 jl lL1 cmp al,9 ja lL1 sub al,0 m
14、ov cl,al mov ax,bx mul ten add ax,cx mov bx,ax jmp ll2ll1: popf pop dx pop ax pop cx retinputint endpprintint proc near ; push si push ax push dx push cx pushf mov si,0 mov ax,bx l2: cwd div ten mov bufsi,dl inc si cmp ax,0 je L1 jmp l2l1: mov cx,sil3: dec si mov dl,bufsi add dl,30h mov ah,2 int 21h
15、 loop l3 popf pop cx pop dx pop ax pop si retprintint endphexout proc push cx push bx push dx push ax mov ax,bx MOV BX, 16 ;16进制,要除16 MOV CX, 4 ;求4位16进制数.ABC: CWD ;将AX扩展到DX DIV BX PUSH DX ;保存余数到堆栈. LOOP ABC MOV CX, 4 ;显示4位.ASD: POP DX CMP DL, 10 JB A48 ADD DL, 7A48: ADD DL, 48 MOV AH, 2 INT 21H ;输出. LOOP ASD pop ax pop dx pop bx pop cx rethexout endpcode ends end start小结编写三个子程序,除以进制,取余输出。在主程序中使用call调用函数。指导教师评语及成绩评语: 成绩: 指导教师签名: 批阅日期:
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1