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

实验任务1
 程序源码
assume cs:code, ds:data

data segment
    x db 1, 9, 3
    len1 equ $ - x

    y dw 1, 9, 3
    len2 equ $ - y
data ends

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

    mov si, offset x
    mov cx, len1
    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
    mov cx, len2/2
    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)

 跳转指令为E2F2

F2为补码

补码11110010

原码10001110

即为十进制的-14,十六进制的-E

IP位置为1B

1B-E=D

即为标号s1的位置

(2)

跳转指令为E2F0

F0为补码

补码11110000

原码10010000

即为十进制的-16,十六进制的-10

IP位置为39

39-10=29

即为标号s2的位置

实验任务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

分析

执行第一个call时将当时的IP压入栈,即offset s1,则ax为offset s1

执行第二个call时将当时的CS、IP依次压入栈,bx为IP,cx为CS,则bx为offset s2,cx为offset code

结果

 

 执行后,ax与offset s1相等,bx与offset s2相等,cx与offset code相等,与分析一致

实验任务3
 如果想调用int 21h显示字符的功能,要在程序里让ah=02h,dl=要显示字符的asc码
程序源码 

DATAS SEGMENT
x db 99, 72, 85, 63, 89, 97, 55
len equ $- x
DATAS ENDS


STACKS SEGMENT
db 16 dup(0)
STACKS ENDS


CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX

mov ax,stacks
mov ss,ax
mov sp,16

mov bx,0
mov cx,7
s1:
mov ah,0
mov al,ds:[bx]
call f1
call f2
inc bx
loop s1


MOV AH,4CH
INT 21H

f1:
mov dl,10
div dl;16b/8b,al 商,ah 余数
add al,48
add ah,48
mov dh,ah;ah有冲突

mov ah,2
mov dl,al
int 21h

mov ah,2
mov dl,dh
int 21h

ret

f2:
mov ah,2
mov dl,20h
int 21h
ret
CODES ENDS
END START

 

结果

 
实验任务4
程序源码
DATAS SEGMENT
    x db 'try' 
    len equ $ - x
DATAS ENDS

STACKS SEGMENT
    db 16 dup(0)
STACKS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,DATAS
    MOV DS,AX
    
    mov ax,stacks
    mov ss,ax
    mov sp,16
    
    mov si,0
    mov cx,len
    mov bl,0ah;颜色 0 000 1 010
    mov bh,0;行
    call printStr
    
    mov si,0
    mov cx,len
    mov bl,0ch;0 000 1 100
    mov bh,24;0-24
    call printStr
    
    MOV AH,4CH
    INT 21H
    
printStr:
    mov ah,0
    mov al,bh
    mov dl,0a0h;160
    mul dl;ax 积
    
    ;显示位置
    mov di,ax
    mov ax,0b800h
    mov es,ax
    
    s1:
        mov al,ds:[si]
        mov es:[di],al
        mov es:[di+1],bl
        inc si
        add di,2
        loop s1
        
    ret
CODES ENDS
    END START

结果

实验任务5
 程序源码
DATAS SEGMENT
    stu_no db '201983290229' 
    len = $ - stu_no  
DATAS ENDS

STACKS SEGMENT
    db 16 dup(0)
STACKS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,DATAS
    MOV DS,AX
    
    mov ax,stacks
    mov ss,ax
    mov sp,16
    
    ;前24行
    mov ax, 0b800h
    mov es, ax
    mov si, 1;颜色
    
    mov al, 24
    mov dl, 80
    mul dl;ax 积
    
    mov cx, ax      
    print0:
        mov al, 17h;0 001 0 111
        mov es:[si], al
        add si, 2
    loop print0
    
    sub si, 1
    
    ;最后一行
    mov ax, 80       
    sub ax, len
    mov dl, 2        
    div dl;商 al      
    mov dl, al;dl=(80-len)/2 分隔符长度
    
    ;左
    mov ch,0
    mov cl,dl
    call printSeparator
    
    ;中
    mov di,0;字符串开始
    mov cx,len;字符串长度
    mov bl,17h;颜色0 001 0 111
    call printStr
    
    ;右
    mov ch,0
    mov cl,dl
    call printSeparator
    
    MOV AH,4CH
    INT 21H
    
printStr:
    s1:
        mov al,ds:[di]
        mov es:[si],al
        mov es:[si+1],bl
        inc di
        add si,2
        loop s1
    ret
    
printSeparator:
    mov al, '-'
    mov ah, 17h;0 001 0 111
    mov word ptr es:[si], ax
    add si, 2
    loop printSeparator
    ret
    
CODES ENDS
    END START

结果

 

posted @ 2021-11-29 21:51  AIM2019  阅读(51)  评论(3编辑  收藏  举报