汇编复习题 Test1

来源:互联网 发布:logo图标快速生成软件 编辑:程序博客网 时间:2024/06/11 07:50

最近复习汇编……可能会有错

1.已知变量X的值为2767,请编程序统计变量X中的二进制值中有多少个1,并记入ONE变量中。2.从键盘上输入一系列以$为结束符的字符串,然后对其中的非数字字符计数,并显示出计数结果。3.试编写一程序,要求比较两个字符串STRING1和STRING2所含字符是否相同,若相同则显示“MATCH”,若不相同则显示“NO MATCH”。从键盘上输入一系列以$为结束符的字符串,然后对其中的非数字字符计数,并显示出计数结果4.编写一子程序SKIPLINES,完成输出空行的功能。空行的行数在参数AX寄存器中。5. Link指向一个字线性表,其中的首单元保存线性表的长度,编一个程序,将该线性表中内容为0FFFFH的项删除。
1.DATAS SEGMENT    X DW 2767H    ONE DW ?DATAS ENDSCODES SEGMENT    ASSUME CS:CODES,DS:DATASSTART:    MOV AX,DATAS    MOV DS,AX    MOV AX, X    MOV BX,0H    MOV CX,16again:    shl ax,1    ADC BX,0loop again    mov ONE,BX    MOV AH,4CH    INT 21HCODES ENDS    END START2.data segmentbuf db 101,?,101 dup (?)data endsstack segment stack dw 20h dup(?)top label wordstack endscode segment    assume ds:data,cs:code,ss:stack    p proc far     mov ax,data    mov ds,ax    mov ax,stack    mov ss,ax    lea sp,top    ;输入到缓冲区    lea dx,buf    mov ah,0ah      int 21h    ;cx=输入的个数 si=指向缓冲区的开头    lea si,buf    inc si    mov cx,[si]         xor bx,bxl1: inc si    cmp BYTE PTR[si],'0'    jb l1    cmp BYTE PTR[si],'9'    ja l1    cmp BYTE PTR[si],'$'    je exit2    inc bl    loop l1 exit2:        MOV AX,0003H     INT 10H    ;输出结果    mov cx,8input:    rol bl,1    mov dl,bl    and dl,1    add dl,30h    mov ah,02h    int 21h    loop inputexit:    mov ah,4ch    int 21h    p endpcode ends end p3.00DATAS SEGMENT     str1 db 'dfsaff'     len_string1  equ  $-str1     str2 db 'dfsadf'     len_string2  equ  $-str2     str3 db 'match$'     str4 db 'not match$'DATAS ENDSCODES SEGMENT    ASSUME CS:CODES,DS:DATAS,ES:DATASSTART:    MOV AX,DATAS    MOV DS,AX    MOV ES,AX    xor bx,bx    mov cx,len_string1    cmp cx,len_string2    JNZ LAB2    MOV DI,OFFSET STR1    MOV SI,OFFSET STR2    repz CMPSB    JZ LAB1    JNZ LAB2LAB1:    mov dx,offset str3     mov ah,09h     int 21h     mov ah,4ch     int 21h LAB2:    mov dx,offset str4     mov ah,09h     int 21h     MOV AH,4CH    INT 21HCODES ENDS    END START0000H 01FC00H 01FD80H 01FE0FH 01FF4.stack segment     db 64 dup (?) stack ends data segment     msg1 db 'There are some empty rows under this row!','$'     msg2 db 'Success!','$' data ends code segment     assume cs:code,ds:data,ss:stack start:     mov ax,data     mov ds,ax     mov ah,09H     mov dx,offset msg1     int 21H     mov ax,0     call WRITE     mov ah,09H     mov dx,offset msg2     int 21H     mov ax,4C00H     int 21H     WRITE:     ;(插入空行,AX=所空行数)     ;(注:AX为0时为重起一行)     mov cx,ax     inc cx     mov ah,02H     WRITE001:     mov dl,0DH     int 21H     mov dl,0AH     int 21H     loop WRITE001     ret     code ends end start
原创粉丝点击