汇编复习Test5

来源:互联网 发布:机械加工工艺编程员 编辑:程序博客网 时间:2024/06/11 16:58
1.编一个程序,从键盘输入一个不长于120个字符的串(回车键结束),然后将其中的字母字符显示输出(在显示输出前,补充输出回车换行)。DATAS SEGMENT   BUF DB 120 DUP(?)DATAS ENDSSTACKS SEGMENT    ;此处输入堆栈段代码STACKS ENDSCODES SEGMENT    ASSUME CS:CODES,DS:DATAS,SS:STACKSSTART:    MOV AX,DATAS    MOV DS,AX    MOV SI,offset BUFAG:    MOV AH,01H    INT 21H    CMP AL,0Dh    JE EXIT    MOV [SI],AL    inc si    JMP AGEXIT:    MOV [SI],AL    MOV AH,02H    MOV SI,offset BUFAG1:    mov dl,[si]    INT 21H    CMP AL,0Dh    JE EXIT1    inc si    JMP AG1EXIT1:    MOV AH,4CH    INT 21HCODES ENDS    END START2.编一个程序完成从键盘上输入一个4位的16进制数,并以八进制形式显示出来。DATAS SEGMENT    num dw 1000h,100h,10h,1hDATAS ENDSSTACKS SEGMENT    ;此处输入堆栈段代码STACKS ENDSCODES SEGMENT    ASSUME CS:CODES,DS:DATAS,SS:STACKSSTART:    MOV AX,DATAS    MOV DS,AX    MOV SI,OFFSET num    MOV CX,4    MOV BP,0input:    MOV AH,01H    INT 21H    CMP AL,39H    JBE less    SUB AL,7Hless:       SUB AL,30h    MOV AH,0    MOV BX,[SI]    mul BX    ADD BP,AX    ADD SI,2loop input    rol bp,1    mov dx,bp    and DL,01H    add dl,30h    mov ah,02h    INT 21H    mov cx,5output:    push cx    mov cl,3    rol bp,cl    mov dx,bp    and DL,07H    add dl,30h    mov ah,02h    INT 21H    pop cxloop output    MOV AH,4CH    INT 21HCODES ENDS    END START3. 在首地址为DATA的字数组中,存放了100H个16位无符号数,编一个子程序,找出其中的最小数,并存入AX寄存器中返回。4. 已知数据块BUF中存放3个字节数据,是编写一个程序判断这3个数的关系:如果3个数相等,则显示“All  equal.”;如果有任意两个数相等,则显示“Only two equal.”;如果三个数各不相同,则显示“All three different from each other.”。DATA SEGMENT    BUF DB 1,2,3 ;三个数据    DISP1 DB 'ALL EQUAL$'    DISP2 DB 'ONLY TWO equal$'    DISP3 DB 'ALL THREE DIFFRENT FROM EACH OTHER$'DATA ENDSCODE SEGMENT     ASSUME CS:CODE,DS:DATAmain proc farSTART:MOV AX,DATA    MOV DS,AX    MOV SI,OFFSET BUF ;地址指针    MOV AX,[SI]    CMP AX,[SI+2] ;第一个数比第二个数    JNZ L1 ;1,2不相等则跳转    CMP AX,[SI+4] ;接上面,1,2相等的话比较1,3    JNZ L2     LEA DX,DISP1 ;不相等则跳转,显示两个相等    CALL PRINT1 ;否则全相等,调用子程序显示    JMP QUITL1:CMP AX,[SI+4] ;此处是在1,2不相等的条件下比较1,3    JZ L2 ;相等的话即有两个相等跳转至L2(显示DISP2)    MOV AX,[SI+2]    CMP AX,[SI+4] ;1,3不相等,1,2不相等,比较2,3    JZ L2     LEA DX,DISP3 ;2,3相等的话也是两个相等,同样跳转至L2    CALL PRINT1 ;否则没有相等的,调用子程序显示disp3    JMP QUITL2:    LEA DX,DISP2    CALL PRINT1QUIT:MOV AX,4C00H    INT 21Hmain endp    ;    ;子程序部分    PRINT1 PROC    MOV AH,09H    INT 21H ;调用功能显示都相等    RET    PRINT1 ENDP    CODE ENDSEND START5.Link指向一个字线性表,其中的首单元保存线性表的长度,编一个程序,将该线性表中元素的值为负数的项删除。  DATAS SEGMENT    Link   dw -9h,3h,33h,2h,1h,-77h,22h,23h,33h    finial  dw ($-Link)/TYPE LinkDATAS ENDSSTACKS SEGMENTSTACKS ENDSCODES SEGMENT    ASSUME CS:CODES,DS:DATAS,SS:STACKSSTART:    MOV AX,DATAS    MOV DS,AX    lea si,Link    mov cx,finialag:    mov ax,[si]    cmp ax,0    jge exit    dec cx    push cx    mov di,sidelete:    mov ax,[di+2]    mov [di],ax    add di,2loop delete    pop cxexit:    add si,2loop ag        MOV AH,4CH    INT 21HCODES ENDS    END START
原创粉丝点击