收藏 分享(赏)

福州大学汇编语言课程作业1~5.doc

上传人:gnk289057 文档编号:6520084 上传时间:2019-04-14 格式:DOC 页数:16 大小:90KB
下载 相关 举报
福州大学汇编语言课程作业1~5.doc_第1页
第1页 / 共16页
福州大学汇编语言课程作业1~5.doc_第2页
第2页 / 共16页
福州大学汇编语言课程作业1~5.doc_第3页
第3页 / 共16页
福州大学汇编语言课程作业1~5.doc_第4页
第4页 / 共16页
福州大学汇编语言课程作业1~5.doc_第5页
第5页 / 共16页
点击查看更多>>
资源描述

1、作业 1.1题目: 设某存储区有一数组 ARRAY,现要求对数组中数据分别按正数(含 0)和负数的绝对值累加,并统计正数和负数的个数。累加和与统计个数分别存入SUM1、SUM2、CUNT1 和 CUNT2 单元中。INCLUDE IRVINE32.INC.DATADAT DD 1100B,1000BSUM DD ?.CODESTART: XOR EAX,EAXMOV ESI,0MOV EAX,DATESIADD ESI,4ADD EAX,DATESIMOV SUM,EAXEXITEND START1.2 两个 32 位数的相加运算 内容: DAT 开始的单元中存放两个 32 位二进制 数,两个

2、数相加后结果存入 SUM 单元中。 ( SUM 为 32 位 )DAT DD X1,X2SUM DD ?INCLUDE IRVINE32.INC.DATAARRAY DB 50 DUP(?)SUM1 DB ?SUM2 DB ?CUNT1 DB ?CUNT2 DB ?COUNT DB ?PROMPT1 BYTE 要输入几个数:,0PROMPT2 BYTE 请输入数:,0PROMPT3 BYTE 正数的个数和正数的和为:,0PROMPT4 BYTE 负数的个数和绝对值和为:,0PROMPT5 BYTE 是否退出?(Y/N),0.CODESTART:XOR EAX,EAXXOR EBX,EBXXOR

3、 ECX,ECXXOR EDX,EDXLEAEDX,PROMPT1CALL WRITESTRINGCALL READINTCMP EAX,0JNG STARTMOV COUNT,ALMOV CL,COUNTMOV ESI,0LEAEDX,PROMPT2CALL WRITESTRINGINPUT: CALL READINTMOV ARRAYESI,ALINC ESILOOP INPUTXOR EAX,EAXXOR EBX,EBXXOR ECX,ECXXOR EDX,EDXMOV ESI,0MOV CL,COUNTDEAL: MOV CH,ARRAYESICMP CH,0JNL ZHENGFU:

4、NEG CHADD BL,CHINC DLJMP NEXTZHENG: ADD AL,CHINC DHNEXT: INC ESIDEC CLCMP CL,0JNE DEALMOV SUM1,ALMOV SUM2,BLMOV CUNT1,DHMOV CUNT2,DLXOR EAX,EAXLEAEDX,PROMPT3CALL WRITESTRINGMOV AL,CUNT1CALL WRITEINTCALL CRLFMOV AL,SUM1CALL WRITEINTCALL CRLFLEAEDX,PROMPT4CALL WRITESTRINGMOV AL,CUNT2CALL WRITEINTCALL

5、CRLFMOV AL,SUM2CALL WRITEINTCALL CRLFLEAEDX,PROMPT5CALL WRITESTRINGCALL READCHARCMP EAX,YJE QUITCALL CRLFJMP STARTQUIT: EXITEND START2.1 统计正数(负数)的个数内容:DAT 开始的单元中存放 N 个字节有符号数,统计正数的个数存入 T0 单元中;负数的个数存入 T1 单元中;Dat DB X1,XNT0 DB ?T1 DB ?INCLUDE IRVINE32.INC.DATADAT DB 50 DUP(?)T0 DB ?T1 DB ?COUNT DB ?PRO

6、MPT1 BYTE 请输入个数:,0PROMPT2 BYTE 请输入数:,0PROMPT3 BYTE 正数和负数的个数分别是:,0PROMPT BYTE 、,0.CODESTART: MOV T0,0MOV T1,0XOR EAX,EAXXOR ECX,ECXMOV ESI,0LEAEDX,PROMPT1CALL WRITESTRINGCALL READINTMOV COUNT,ALLEAEDX,PROMPT2CALL WRITESTRINGMOV CL,COUNTINPUT: CALL READINTMOV DATESI,ALINC ESILOOP INPUTMOV ESI,0MOV CL,

7、COUNTJUDGE: MOV AL,DATESICMP AL,0JNL ZHENGFU: INC T1JMP NEXTZHENG: INC T0NEXT: INC ESILOOP JUDGEXOR EAX,EAXLEAEDX,PROMPT3CALL WRITESTRINGMOV AL,T0CALL WRITEINTMOV EDX,OFFSET PROMPTCALL WRITESTRINGMOV AL,T1CALL WRITEINTCALL CRLFJMP STARTEND START2.2 求最大数内容:DAT 开始的字单元中存放 N 个无符号数,求出最大数存入 MAX 单元中。DAT DW

8、 X1,XNMAX DW ?INCLUDE IRVINE32.INC.DATADAT DW 50 DUP(?)MAX DW ?COUNT DW ?PROMPT1 BYTE 输入几个数?,0PROMPT2 BYTE 请输入数:,0PROMPT3 BYTE 最大的数是:,0.CODESTART: XOR EAX,EAXXOR ECX,ECXLEAEDX,PROMPT1CALL WRITESTRINGCALL READINTMOV COUNT,AXLEAEDX,PROMPT2CALL WRITESTRINGMOV ESI,0MOV CX,COUNTINPUT: CALL READINTMOV DAT

9、ESI,AXADD ESI,2LOOP INPUTMOV AX,DAT0MOV MAX,AXMOV ESI,2MOV CX,COUNTDEC CXDEAL: MOV AX,DATESICMP AX,MAXJNA NEXTMOV MAX,AXNEXT: ADD ESI,2LOOP DEALLEAEDX,PROMPT3CALL WRITESTRINGMOV AX,MAXCALL WRITEINTCALL CRLFJMP STARTEND START3.1 数据查找内容:TAB 开始的字节单元中存放 N 个无符号数,dat 单元存放一个已知数据 X,现从TAB 中查找是否存在数据 X,如果存在,NO

10、 单元存放该数据在 TAB 中的序号,否则 NO单元存放 0FFH 。TAB DB X1,XNdat DB xno DB ?INCLUDE IRVINE32.INC.DATATAB DB 20 DUP(?)DAT DB ?NO DB -1COUNT DB ?PROMPT1 DB INPUT HOW MANY NUMBER?,0PROMPT2 DB INPUT SERACH NUMBER:,0PROMPT3 DB INPUT NUMBER:,0PROMPT4 DB THE NUMBER IS IN:,0.CODESTART:XOR EAX,EAXXOR ECX,ECXLEAEDX,PROMPT1

11、CALL WRITESTRINGCALL READINTMOV COUNT,ALLEAEDX,PROMPT2CALL WRITESTRINGCALL READINTMOV DAT,ALLEAEDX,PROMPT3CALL WRITESTRINGMOV ESI,0MOV CL,COUNTINPUT: CALL READINTMOV TABESI,ALINC ESILOOP INPUTMOV ESI,0XOR EAX,EAXMOV CL,COUNTSEARCH: MOV AL,TABESICMP AL,DATJNE NEXTMOV EBX,ESIMOV NO,BLJMP QUITNEXT: INC

12、 ESILOOP SEARCHQUIT: CMP NO,-1JE NOFINDFIND: JMP OUTPUTNOFIND: MOV NO,0FFHOUTPUT: MOV AL,NOLEAEDX,PROMPT4CALL WRITESTRINGCALL WRITEHEXCALL CRLFJMP STARTEND START3.2 无符号数排序 内容:TAB 开始的单元中存放 N 个字节无符号数,请按照从大到小排序后,存入 DAT单元中。 (注意:TAB 数据保持不变)TAB DB X1,XNDAT DB N DUP(?)INCLUDE IRVINE32.INC.DATATAB DB 50 DUP

13、(?)DAT DB 50 DUP(?)COUNT DB 0PROMPT1 BYTE 输入几个数:,0PROMPT2 BYTE 输入数:,0PROMPT3 BYTE 从大到小排序后是:,0.CODESCANF PROCXOR EAX,EAXXOR ECX,ECXLEAEDX,PROMPT1CALL WRITESTRINGCALL READINTMOV COUNT,ALLEAEDX,PROMPT2CALL WRITESTRINGMOV ESI,0MOV CL,COUNTINPUT: CALL READINTMOV TABESI,ALINC ESILOOP INPUTCALL CRLFSCANF E

14、NDPTRANS PROCXOR EAX,EAXXOR ECX,ECXMOV ESI,0MOV CL,COUNTMOVE: MOV AL,TABESIMOV DATESI,ALINC ESILOOP MOVETRANS ENDPORDER PROCXOR EAX,EAXXOR ECX,ECXXOR ESI,ESIXOR EDI,EDIMOV CL,COUNTDEC ECXBEGIN: MOV EDI,ECXMOV ESI,0COMP: MOV AL,DATESICMP AL,DATESI+1JNB NEXTXCHG AL,DATESI+1MOV DATESI,ALNEXT: INC ESILO

15、OP COMPMOV ECX,EDILOOP BEGINORDER ENDPPRINT PROCXOR EAX,EAXXOR ECX,ECXLEAEDX,PROMPT3CALL WRITESTRINGMOV ESI,0MOV CL,COUNTOUTPUT: MOV AL,DATESICALL WRITEINT; CALL CRLFINC ESILOOP OUTPUTCALL CRLFPRINT ENDPSTART:CALL SCANFCALL TRANSCALL ORDERCALL PRINTJMP STARTEND START4.1 代码转换内容:用子程序设计的方法,分别把 BUF 字单元中

16、的四位十六进制数转换为 ASCII 码存入 MAS 开始的单元中,并在终端上显示 MAS 开始的 4 个字节单元。BUF DW XMAS DB 4 DUP(?)INCLUDE IRVINE32.INC.DATABUFDW 16ABHMAS DB 4 DUP(?).CODEMAIN PROCCALL DecbinEXITMAIN ENDPDecbin PROCPUSH DXMOV ESI,0MOV CH,4HRETURN: MOV CL,4HMOV DX,BUFROL DX,CLMOV BUF,DXAND DL,0FH ;取 DL 低 4 位CMP DL,0AHJB YESADD DL,7YES

17、: ADD DL,30H ;该步将 DL 中的数转换为 ASCII 码MOV MASESI,DLMOV AL,MASESIMOVZX EAX,AL ;将 MASESI原来 DB 类型拓展为 32 位CALL WriteIntCALL crlfINC ESIDEC CHCMP CH,0JNE RETURNPOP DXRETDecbin ENDPEND MAIN4.2 键盘输入内容:从键盘输入一串字母并保存在 string 开始的地址单元,要求将该字符串中的大写字母转化为小写字母后用子程序实现在终端上依次显示该串字母的 ASCII 码。string db n dup(?)INCLUDE IRVIN

18、E32.INC.DATASTRING DB 50 DUP(?)PROMPT1 BYTE “要输入的字符串含有几个字符:“,0PROMPT2 BYTE “请输入字符串: “,0PROMPT3 BYTE “转换后所有小写字符的 ASCIII 码是:“,0COUNT DD 0.CODESCANF PROC ;字符串输入子程序LEAEDX,PROMPT1CALL WRITESTRINGCALL READINT ;已将字符个数传递给 EAXMOV COUNT,EAXLEAEDX,PROMPT2CALL WRITESTRINGLEAEDX,STRING;将 EDX 指向存储空间 STRINGMOV ECX

19、,COUNT ;共输入 EAX 个字符CALL READSTRINGRETSCANF ENDPEXCHANGE PROC ;大写转换小写子程序XOR EAX,EAXMOV ESI,0MOV ECX,COUNTAGAIN: MOV AL,STRINGESICMP AL,61HJNB NEXTXOR AL,20H ;大写转成小写MOV STRINGESI,AL ;将转换后的字母放入 PROMPTNEXT: INC ESILOOP AGAINCALL CRLFRETEXCHANGE ENDPPRINT PROC ;依次显示字符子程序LEAEDX,PROMPT3CALL WRITESTRINGCALL

20、 CRLFXOR EAX,EAXMOV ESI,0MOV ECX,COUNTAGAIN1:MOV AL,STRINGESIMOVZX EAX,AL ;STRING 是 DB 型,不能直接传递给 32 位的 EAX,故要经过AL-EAX 的拓展CALL WRITEINTCALL CRLFINC ESILOOP AGAIN1RETPRINT ENDPSTART: CALL SCANFCALL EXCHANGECALL PRINTEXITEND START5.1 将从键盘输入的 N 个无符号数保存到数组 DAT ,找出 N 个无符号数中的偶数存放到数组 P,统计并在终端上显示数组 P 的数据个数 n

21、o。DAT DW X1,XNP DW n dup (?)no DW ?要求:1、求偶数数组 P 的功能用子程序实现2、画主程序及子程序流程图3、熟练掌握综合程序设计方法INCLUDE IRVINE32.INC.DATADAT DW 50 DUP(?)P DW 50 DUP(?)NO DW 0COUNT DD ?PROMPT1 BYTE “将输入几个无符号数?: “,0PROMPT2 BYTE “请输入无符号数: “,0PROMPT3 BYTE “偶数的个数为: “,0.CODE;-SCANF PROCLEAEDX,PROMPT1CALL WRITESTRINGCALL READINTMOV C

22、OUNT,EAXMOV ECX,COUNTMOV ESI,0LEAEDX,PROMPT2CALL WRITESTRINGINPUT: CALL READINTMOV DATESI,AXADD ESI,2LOOP INPUTRETSCANF ENDP;-DEAL PROCXOR EAX,EAXMOV SI,0MOV DI,0MOV ECX,COUNTAGAIN: MOV AX,DATSIAND AL,1CMP AL,0JNE NEXTMOV AX,DATSIMOV PDI,AXADD DI,2INC NONEXT: ADD ESI,2LOOP AGAINRETDEAL ENDP;-PRINT P

23、ROCLEAEDX,PROMPT3CALL WRITESTRINGMOV AX,NOCALL WRITEINTCALL CRLFRETPRINT ENDP;-EXAM PROC ;输入验证函数XOR EAX,EAXMOV ESI,0MOV ECX,COUNTBEGIN: MOV AX,DATESICALL WRITEINTCALL CRLFADD ESI,2LOOP BEGINCALL CRLFRETEXAM ENDP;-START: CALL SCANF; CALL EXAMCALL DEALCALL PRINTEXITEND START5.2 将从键盘输入的 N 个有符号数保存到数组 TA

24、B ,找出 N 个有符号数中绝对值大于 X的最小负奇数存放到 Min 单元,如果没有找到则 Min 单元存放 0。在终端上显示 Min 的绝对值。TAB DD X1,XNX DD xx(无符号数,自己设定)Min DD ?要求:1、求数据 Min 的功能用子程序实现2、画主程序及子程序流程图3、熟练掌握综合程序设计方法INCLUDE IRVINE32.INC.DATATAB DD 100 DUP(?)X DD ?MINDD ?COUNT DD ?PROMPT1 BYTE “要输入几个有符号数: “,0PROMPT2 BYTE “请输入要比较的数 X:“,0PROMPT3 BYTE “请输入有符

25、号数: “,0PROMPT4 BYTE “MIN 的绝对值为:“,0;-.CODESCANF PROCLEAEDX,PROMPT1CALL WRITESTRINGCALL READINTMOV COUNT,EAXMOV ECX,COUNTCALL CRLFLEAEDX,PROMPT2CALL WRITESTRINGCALL READINTMOV X,EAXCALL CRLFLEAEDX,PROMPT3CALL WRITESTRINGMOV ESI,0INPUT: CALL READINTMOV TABESI,EAXADD ESI,4LOOP INPUTRETSCANF ENDP;-FIND P

26、ROCMOV ESI,0MOV ECX,COUNTAGAIN: MOV EAX,TABESICMP EAX,0 ;判断是否为负数JNL NEXT ;大于等于 0 跳转AND AL,01H ;取最低位CMP AL,0 ;判断最低位是否为 0,为 0 是偶数JE NEXT ;是偶数跳转MOV EAX,TABESI ;重新取 TABESINEG EAX ;取绝对值CMP EAX,X ;比较绝对值和 X 的大小JNA NEXT ;低于等于转移CMP ESI,0 ;判断是否第一次放进 MINJE FIRST ;是 0,是第一次存放跳转NEG EAX ;不是 0,即不是第一次存放,MIN 中已有数,重新取

27、 TABESICMP EAX,MIN ;比较当前数与 MIN 中数的大小JNL NEXT ;大于等于 MIN 跳转JMP DEALFIRST: NEG EAX ;该步仅用于第一次存放 MIN 时恢复 EAX 的原值DEAL: MOV MIN,EAXNEXT: ADD ESI,4LOOP AGAINCALL CRLFRETFIND ENDP;-PRINT PROCLEAEDX,PROMPT4CALL WRITESTRINGMOV EAX,MINNEG EAXCALL WRITEINTCALL CRLFRETPRINT ENDP;-START:MOV MIN,0CALL SCANFCALL FINDCALL PRINTCALL CRLFEXITEND START

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 大学课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报