实验3 转移指令跳转原理及其简单应用编程

1

assume cs:code, ds:data
data segment
x db 1, 9, 3
len1 equ $ - x ; 符号常量, $指下一个数据项的偏移地址,这个示例中,是3
y dw 1, 9, 3
len2 equ $ - y ; 符号常量, $指下一个数据项的偏移地址,这个示例中,是9
data ends
code segment
start:
mov ax, data
mov ds, ax
mov si, offset x ; 取符号x对应的偏移地址0 -> si
mov cx, len1 ; 从符号x开始的连续字节数据项个数 -> cx
mov ah, 2
s1:mov dl, [si]
or dl, 30h
int 21h
mov dl, ' '
int 21h ; 输出空格
inc si
loop s1
mov ah, 2
mov dl, 0ah
int 21h ; 换行
mov si, offset y ; 取符号y对应的偏移地址3 -> si
mov cx, len2/2 ; 从符号y开始的连续字数据项个数 -> cx
mov ah, 2
s2:mov dx, [si]
or dl, 30h
int 21h
mov dl, ' '
int 21h ; 输出空格
add si, 2
loop s2
mov ah, 4ch
int 21h
code ends
end start

 

 

 

 

 

第一题

(1)

27

(2)

14

 

2

assume cs:code, ds:data
data segment
dw 200h, 0h, 230h, 0h
data ends
stack segment
db 16 dup(0)
stack ends
code segment
start:
mov ax, data
mov ds, ax
mov word ptr ds:[0], offset s1
mov word ptr ds:[2], offset s2
mov ds:[4], cs
mov ax, stack
mov ss, ax
mov sp, 16
call word ptr ds:[0]
s1: pop ax
call dword ptr ds:[2]
s2: pop bx
pop cx
mov ah, 4ch
int 21h
code ends
end start

 

 

 

 

第二题

(1)

Ax=s1的偏移地址

Bx=s2的偏移地址

Cx=s2的段地址

 

 

3

assume cs:code ds:data
data segment
x db 99, 72, 85, 63, 89, 97, 55
len equ $- x
data ends

code segment
main proc
start:
mov ax,data
mov ds,ax
mov cx,len
mov si,offset x
s:mov al,[si]
call printNumber
call printSpace
inc si
loop s
mov ax,4c00h
int 21h
main endp

printNumber proc
mov bl,10
div bl
mov bh,ah
mov ah,2
mov dl,al
or dl,30h
int 21h
mov ah,2
mov dl,bh
or dl,30h
int 21h

printNumber endp

printSpace proc
mov ah,2
mov dl,' '
int 21h
ret
printNumber endp

code ends
end start

 

 

 

4

assume cs:code, ds:data

data segment
    str db 'try'
    len equ $ - str
data ends

code segment
start:
    mov ax, data
    mov ds, ax

    mov cx, len
    mov ax, 0
    mov si, ax

    mov bl, 0Ah 
    mov bh,1 
    call printStr


    mov cx, len  
    mov ax, 0
    mov si, ax

    mov bl, 0Ch 
    mov bh, 24  
    call printStr

    mov ah, 4ch
    int 21h

printStr:
    mov al, bh 
    mov dl, 0A0h 
    mul dl    

    mov di, ax
    mov ax, 0b800h
    mov es, ax  

    print:
        mov al, ds:[si]
        mov es:[di], al 
        mov es:[di+1], bl  
        inc si
        add di, 2
    loop print

    ret

code ends
end start

 

 

 

5

assume cs:code, ds:data

data segment
    stu_no db '201983290540'
    len = $ - stu_no
data ends

code segment
start:
    mov ax, data
    mov ds, ax
    mov di, 0

    call print

    mov ah, 4ch
    int 21h

print:
    mov ax, 0b800h
    mov es, ax
    mov si, 1

    mov al, 24    ;24行
    mov dl, 80    ;每行80个字符
    mul dl        ;24*80个字符

    mov cx, ax    ;24*80次

    blue:        ;打印蓝色
        mov al, 17h    ;颜色
        mov es:[si], al    ;填色
        add si, 2
    loop blue
    
    sub si, 1    ;指针回到最后一行

    mov ax, 80
    sub ax, len
    mov dl, 2
    div dl
    mov dx, ax

    mov cx, dx
    call printStr

    mov cx, len
    printNumStr:
        mov al, ds:[di]
        mov ah, 17h
        mov word ptr es:[si], ax
        inc di
        add si, 2
    loop printNumStr

    mov cx, dx
    call printStr

    ret

printStr:
    mov al, '-'
    mov ah, 17h
    mov word ptr es:[si], ax
    add si, 2
loop printStr

ret

code ends
end start

 

 

posted @ 2021-11-30 09:37  jsbyyz  阅读(5)  评论(0编辑  收藏  举报