汇编语言实验5

  1. 实验内容
    1)编制程序计算S=1+2·3+3·4+4·5+……+N(N+1)+……直到N(N+1)大于200为止,并将结果由屏幕上显示出来。
    2)将从BUF单元开始的100个字节存储单元的小写字符改为大写字符,并统计小写字符的个数,并显示。
    3)输入两串字符串string1和string2,并比较两个字符串是否相等,相等就显示“match”,否则显示“no match”

  2. 源代码
    1)

 ; multi-segment executable file template.

data segment
    ; add your data here!
    pkey db "press any key...$"
    ten dw 10
ends

stack segment
    dw   128  dup(0)
ends

code segment
start:
; set segment registers:
    mov ax, data
    mov ds, ax
    mov es, ax

    mov cl,1
    mov dl,2
    mov bx,0

loop1:
    mov al,cl
    mul dl
    cmp ax,200
    jnbe print
    add bx,ax
    inc cl
    inc dl
    jmp loop1
print:
    mov ax,bx
    mov cx,0
loop2:
    mov dx,0
    div ten
    inc cx
    push dx
    cmp ax,0
    jz loop3
    jmp loop2
loop3:
    pop dx
    add dl,30H
    mov ah,2
    int 21H
    loop loop3

    mov ax, 4c00h ; exit to operating system.
    int 21h    
ends

end start ; set entry point and stop the assembler.

2)

; multi-segment executable file template.

data segment
    ; add your data here!
    pkey db "press any key...$"
    BUF db "AsfwoifhsamfinafoiathmalknvcklawfASFWGADGWasfioawfhoasfaQWQRFFARASFAAAAAAASSSSSSSSSSSSDDDDDDDDDDDDDD"
ends

stack segment
    dw   128  dup(0)
ends

code segment
start:
; set segment registers:
    mov ax, data
    mov ds, ax
    mov es, ax

    mov cx,100
    mov dx,0 ;记录小写字母个数 
    mov si,0FFFFH ;si=-1循环开始时先+1从零开始
    mov bx,offset BUF
loop1:
    inc si
    cmp [bx][si],61H
    jb notlower
    cmp [bx][si],7AH
    jnbe notlower
    sub [bx][si],20H
    inc dx
notlower:
    loop loop1
;输出小写字母个数
    mov ax,dx
    mov cx,0
    mov bx,10
loop2:
    mov dx,0
    div bx
    inc cx
    push dx
    cmp ax,0
    jz loop3
    jmp loop2
loop3:
    pop dx
    add dl,30H
    mov ah,2
    int 21H
    loop loop3

    mov ax, 4c00h ; exit to operating system.
    int 21h    
ends

end start ; set entry point and stop the assembler.

3)

; multi-segment executable file template.

data segment
    ; add your data here!
    pkey db "press any key...$"
    maxlen1 db 100
    actlen1 db 0
    string1 dw 50 dup(?)
    maxlen2 db 100
    actlen2 db 0
    string2 dw 50 dup(?)
    match db "match$"
    nomatch db "no match$"
ends

stack segment
    dw   128  dup(0)
ends

code segment
start:
; set segment registers:
    mov ax, data
    mov ds, ax
    mov es, ax

    lea dx,maxlen1
    mov ah,0AH
    int 21H
    mov dl,0DH ;输入字符串时按下回车没有换行,添加回车换行符
    mov ah,2
    int 21H
    mov dl,0AH
    mov ah,2
    int 21H    
    lea dx,maxlen2
    mov ah,0AH
    int 21H
    mov dl,0DH
    mov ah,2
    int 21H
    mov dl,0AH
    mov ah,2
    int 21H
    mov cx,101 
    mov si,0
loop1:
    mov al,actlen1[si]
    mov bl,actlen2[si]
    cmp al,bl
    jnz notequal
    inc si
    loop loop1
    lea dx,match
    jmp print
notequal:
    lea dx,nomatch
print:
    mov ah,09H
    int 21H

    mov ax, 4c00h ; exit to operating system.
    int 21h    
ends

end start ; set entry point and stop the assembler.

猜你喜欢

转载自blog.csdn.net/qq_41579622/article/details/81668003