实验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
运行截图:
问题①
跳转位移量:12个字节
从CPU的角度:当前标号的偏移地址减去位移量

问题②
跳转位移量:14个字节
从CPU的角度:当前标号的偏移地址减去位移量

实验任务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
答:
ax=0021
bx=0026
cx=076C

实验任务3
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 byte ptr ds:[10], 10 s1: mov ah, 0 mov al, ds:[si] div byte ptr ds:[10] call printNumber call printSpace inc si loop s1 mov ah,4ch int 21h printNumber: mov bx,ax mov ah, 2 mov dl,al or dl, 30h int 21h mov dl,bh or dl,30h int 21h ret printSpace: mov ah, 2 mov dl,' ' int 21h ret code ends end start

实验任务4
assume ds:data, cs:code data segment str db 'try' len equ $ - str data ends code segment start: mov ax, data mov ds, ax mov cx, len mov si, offset str mov ax, 0b800h mov es, ax mov di, 0 mov ah, 2 s: call printStr inc si add di, 2 loop s mov di, 3840 mov si, offset str mov cx, len mov ah, 4 s1: call printStr inc si add di, 2 loop s1 mov ax, 4c00h int 21h printStr:mov al, [si] mov es:[di], al mov es:[di+1], ah ret code ends end start

实验任务5
assume ds:data, cs:code data segment stu_no db '201983290205' len = $ - stu_no data ends code segment start: mov ax, data mov ds, ax mov cx, 4000 mov si, offset stu_no mov ax, 0b800h mov es, ax mov di, 0 mov ah,17h s: mov al, 0 mov es:[di], al mov es:[di+1], ah inc si add di, 2 loop s mov di, 3840 mov si, offset stu_no mov cx, 74 mov ah, 17h s1: call printgang add di, 2 loop s1 mov di, 3908 mov si, offset stu_no mov cx, len mov ah, 17h s2: call printStu_no inc si add di, 2 loop s2 mov di, 3932 mov si, offset stu_no mov cx, 74 mov ah, 17h s3: call printgang add di, 2 loop s3 mov ax, 4c00h int 21h printStu_no:mov al, [si] mov es:[di], al mov es:[di+1], ah ret printgang:mov al, 45 mov es:[di], al mov es:[di + 1], ah ret code ends end start

浙公网安备 33010602011771号