汇编复习题 test2

本文包含四个程序:统计十六进制数中的1和0数量;统计字符串中的字母数量;比较两个字符串并输出匹配结果;将十六进制数转换为ASCII码输出。涉及汇编语言的位操作、字符串处理及输出指令。
1.已知变量X的值为2767,请编程序统计变量X中的二进制值中1和0的个数,并记入ONE和ZERO变量中。
DATAS SEGMENT
    X DW 2767H
    ONE DW ?
DATAS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS
START:
    MOV AX,DATAS
    MOV DS,AX
    MOV AX, X
    MOV BX,0H
    MOV CX,16
again:
    shl ax,1
    ADC BX,0
loop again
    mov ONE,BX
    MOV AH,4CH
    INT 21H
CODES ENDS
    END START
2.从键盘上输入一系列以$为结束符的字符串,然后对其中的字母字符计数,并显示出计数结果。
DATAS SEGMENT
    X DW 2767H
    ONE DW ?
    ZERO DW ?
DATAS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS
START:
    MOV AX,DATAS
    MOV DS,AX
    MOV AX, X
    MOV BX,0H
    MOV CX,16
again:
    shl ax,1
    JC ISONE
    INC ZERO
    JMP exit
ISONE: ADC BX,0
exit:
loop again
    mov ONE,BX
    MOV AH,4CH
    INT 21H
CODES ENDS
    END START
3.试编写一程序,要求比较两个字符串STRING1和STRING2所含字符是否相同,若相同则显示“MATCH”,若不相同则显示“NO MATCH”。
DATAS SEGMENT
     str1 db 'dfsaff'
     len_string1  equ  $-str1
     str2 db 'dfsadf'
     len_string2  equ  $-str2
     str3 db 'match$'
     str4 db 'not match$'
DATAS ENDS
CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,ES:DATAS
START:
    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 LAB2
LAB1:
    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 21H
CODES ENDS
    END START
4.编写一段子程序BINIHEX,完成十六进制数输出的功能。要输出的数在AX寄存器中。
DATAS SEGMENT
    show DW 12AcH
DATAS ENDS
CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS
START:
    MOV AX,DATAS
    MOV DS,AX
    MOV AX,show
    MOV CX,4
Ag1:
    push CX
    MOV CL,4
    ROL AX,CL
    MOV DX,AX
    AND DL,0FH
    ADD DL,30H
    CMP DL,39H
    JNA show1
    ADD DL,7H
    CMP DL,46H
    JNA show1
    ADD DL,20H
show1:
    push ax
    mov ah,02h
    INT 21H
    pop ax
    pop CX
loop Ag1
    MOV AH,4CH
    INT 21H
CODES ENDS
    END START
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值