实验3 转移指令跳转原理及其简单应用编程
实验任务一
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:

跳转的位移量为 F2h 242
F2 h + 001B h = 010D h 舍弃溢出 01 得到跳转地址为000D h
问题2

跳转的位移量为 F0 h 240
F0 h + 0037 h =0129 h 舍弃溢出 01 得到跳转地址为0029 h
实验任务二
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
call word ptr 为短转移,将 s1的ip压入栈中, 所以pop ax=s1,
call dword ptr 为长转移, 所以将 cs ip 压入栈中,所以 pop bx=s2, pop cx=cs
问题2



结果与理论分析一致
实验任务三

assume cs:code, ds:data data segment x db 99, 72, 85, 63, 89, 97, 55 len equ $- x data ends code segment start: mov ax, data mov ds, ax mov si, offset x mov cx, len mov bl, 10 s1: mov ah, 0 mov al, [si] call printNumber call printSpace inc si loop s1 mov ax, 4c00h int 21h printNumber: div bl ;div 商在al 余数在ah mov dl, al or dl, 30H;数字转字符 mov bh, ah mov ah, 2 int 21h;打印十位数 mov dl, bh or dl, 30H ;dl 输出内容,数字转字符 int 21h ret ; 功能:输出单个字符 ;mov ah, 2 ;mov dl, ×× ; ××是待输出的字符,或其ASCⅡ码值 ;int 21h printSpace: mov ah, 2 mov dl, ' ' int 21h ;输出空格 ret code ends end start

试验任务四


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 ax, 0b800h mov es,ax mov si, offset str mov bh, 0 ;行 mov ax, 0 mov bl, bh mov bh, 0 mov cx, bx s1: add ax, 00A0h loop s1 mov di, ax mov bl, 2 ;颜色 call printStr mov si, offset str mov bh, 24 mov ax, 0 mov bl, bh mov bh, 0 mov cx, bx s2: add ax, 00A0h loop s2 mov di, ax mov bl,4 call printStr mov ax, 4c00h int 21h printStr: mov cx, len s: mov ah, bl ;颜色 mov al, [si] ; 字符 mov es:[di], ax ;输出 inc si add di, 2 loop s ret code ends end start

实验任务五

assume cs:code, ds:data data segment stu_no db '201983290112' len = $ - stu_no data ends code segment start: mov ax, data mov ds, ax mov ax, 0b800h mov es,ax mov bh, 0 mov ax, 0 ;设置行首 di mov bl, bh ; 00A0h * bx mov bh, 0 mov cx, bx s1: add ax, 00A0h loop s1 mov di, ax ;di mov bl, 17h ;设置颜色 00010111 mov cx, 2000 ;25*80 s2: mov al, ' ' mov ah, bl mov es:[di], ax add di, 2 loop s2 mov si, offset stu_no mov bh, 24 ;行 mov ax, 0 mov bl, bh mov bh, 0 mov cx, bx s3: add ax,00A0h loop s3 mov di, ax mov bl, 17h call printStr mov ax, 4c00h int 21h printStr: call print mov cx, len s4: mov ah, bl mov al, [si] mov es:[di], ax inc si add di, 2 loop s4 call print ret print: mov cx, 34 s5: mov ah, bl mov al, 45;'-' mov es:[di], ax add di, 2 loop s5 ret code ends end start

浙公网安备 33010602011771号