当前位置:首页 > 福州大学汇编语言课程作业1~5
SCANF ENDP
;------------------------------ DEAL PROC XOR EAX,EAX MOV SI,0 MOV DI,0 MOV ECX,COUNT AGAIN: MOV AX,DAT[SI] AND AL,1 CMP AL,0 JNE NEXT MOV AX,DAT[SI] MOV P[DI],AX ADD DI,2 INC NO NEXT: ADD ESI,2 LOOP AGAIN RET
DEAL ENDP
;------------------------------------- PRINT PROC LEA EDX,PROMPT3 CALL WRITESTRING MOV AX,NO CALL WRITEINT CALL CRLF RET
PRINT ENDP
;-------------------------------------- EXAM PROC ;输入验证函数 XOR EAX,EAX MOV ESI,0 MOV ECX,COUNT
BEGIN: MOV AX,DAT[ESI] CALL WRITEINT CALL CRLF ADD ESI,2 LOOP BEGIN CALL CRLF RET
EXAM ENDP
;-------------------------------------- START: CALL SCANF ; CALL EXAM
CALL DEAL CALL PRINT EXIT END START
5.2将从键盘输入的N个有符号数保存到数组TAB ,找出N个有符号数中绝对值大于X的最小负奇数存放到Min单元,如果没有找到则Min单元存放0。在终端上显示Min的绝对值。
TAB DD X1,……,XN
X DD xx(无符号数,自己设定) Min DD ?
要求:1、求数据Min的功能用子程序实现 2、画主程序及子程序流程图 3、熟练掌握综合程序设计方法
INCLUDE IRVINE32.INC .DATA
TAB DD 100 DUP(?) X DD ? MIN DD ? COUNT DD ?
PROMPT1 BYTE \要输入几个有符号数:\PROMPT2 BYTE \请输入要比较的数X:\PROMPT3 BYTE \请输入有符号数:\PROMPT4 BYTE \的绝对值为:\;---------------------------------------------------------------- .CODE
SCANF PROC LEA EDX,PROMPT1 CALL WRITESTRING CALL READINT MOV COUNT,EAX MOV ECX,COUNT CALL CRLF LEA EDX,PROMPT2 CALL WRITESTRING CALL READINT MOV X,EAX CALL CRLF LEA EDX,PROMPT3 CALL WRITESTRING MOV ESI,0
INPUT: CALL READINT
MOV TAB[ESI],EAX ADD ESI,4 LOOP INPUT RET
SCANF ENDP
;---------------------------------------------------------------- FIND PROC MOV ESI,0 MOV ECX,COUNT
AGAIN: MOV EAX,TAB[ESI] CMP EAX,0 ;判断是否为负数 JNL NEXT ;大于等于0跳转 AND AL,01H ;取最低位 CMP AL,0 ;判断最低位是否为0,为0是偶数 JE NEXT ;是偶数跳转 MOV EAX,TAB[ESI] ;重新取TAB[ESI] NEG EAX ;取绝对值 CMP EAX,X ;比较绝对值和X的大小 JNA NEXT ;低于等于转移 CMP ESI,0 ;判断是否第一次放进MIN JE FIRST ;是0,是第一次存放跳转 NEG EAX ;不是0,即不是第一次存放,MIN中已有数,重新取TAB[ESI] CMP EAX,MIN ;比较当前数与MIN中数的大小 JNL NEXT ;大于等于MIN跳转 JMP DEAL FIRST: NEG EAX ;该步仅用于第一次存放MIN时恢复EAX的原值 DEAL: MOV MIN,EAX NEXT: ADD ESI,4 LOOP AGAIN CALL CRLF RET
FIND ENDP
;----------------------------------------------------------------- PRINT PROC LEA EDX,PROMPT4 CALL WRITESTRING MOV EAX,MIN NEG EAX CALL WRITEINT CALL CRLF RET
PRINT ENDP
;------------------------------------------------------------------ START:
MOV MIN,0 CALL SCANF CALL FIND CALL PRINT CALL CRLF EXIT END START
共分享92篇相关文档