实验3 转移指令跳转原理及其简单应用编程
实验任务1
- task1.asm源码
1 assume cs:code, ds:data 2 3 data segment 4 x db 1, 9, 3 5 len1 equ $ - x 6 7 y dw 1, 9, 3 8 len2 equ $ - y 9 data ends 10 11 code segment 12 start: 13 mov ax, data 14 mov ds, ax 15 16 mov si, offset x 17 mov cx, len1 18 mov ah, 2 19 s1:mov dl, [si] 20 or dl, 30h 21 int 21h 22 23 mov dl, ' ' 24 int 21h 25 26 inc si 27 loop s1 28 29 mov ah, 2 30 mov dl, 0ah 31 int 21h 32 33 mov si, offset y 34 mov cx, len2/2 35 mov ah, 2 36 s2:mov dx, [si] 37 or dl, 30h 38 int 21h 39 40 mov dl, ' ' 41 int 21h 42 43 add si, 2 44 loop s2 45 46 mov ah, 4ch 47 int 21h 48 code ends 49 end start
- 运行截图

- 回答问题①
line27, 汇编指令 loop s1 跳转时,是根据位移量跳转的。通过debug反汇编,查看其机器码,分析其跳转的位移量是多少?(位移量数值以十进制数值回答)从CPU的角度,说明是如何计算得到跳转后标号s1其后指令的偏移地址的。

loop指令对应的汇编语言代码为E2F2,F2代表偏移量,其二进制形式为11110010将补码转换成原码为10001110 = -14,偏离地址为000D。
- 回答问题②
line44,汇编指令 loop s2 跳转时,是根据位移量跳转的。通过debug反汇编,查看其机器码,分析其跳转的位移量是多少?(位移量数值以十进制数值回答)从CPU的角度,说明是如何计算得到跳转后标号s2其后指令的偏移地址的。

loop指令对应的汇编语言代码为E2F0,F2代表偏移量,其二进制形式为11110000 原码为10010000= -16 = (-10)16,偏移地址为Ox(39-10)=Ox(29)
实验任务2
- task2.asm源码
1 assume cs:code, ds:data 2 3 data segment 4 dw 200h, 0h, 230h, 0h 5 data ends 6 7 stack segment 8 db 16 dup(0) 9 stack ends 10 11 code segment 12 start: 13 mov ax, data 14 mov ds, ax 15 16 mov word ptr ds:[0], offset s1 17 mov word ptr ds:[2], offset s2 18 mov ds:[4], cs 19 20 mov ax, stack 21 mov ss, ax 22 mov sp, 16 23 24 call word ptr ds:[0] 25 s1: pop ax 26 27 call dword ptr ds:[2] 28 s2: pop bx 29 pop cx 30 31 mov ah, 4ch 32 int 21h 33 code ends 34 end start
-
给出分析、调试、验证后,寄存器(ax) = ? (bx) = ? (cx) = ? 附上调试结果界面截图。
(ax)= ip的值,(bx) = ip的值,(cx) = cs


实验任务3
1 assume cs:code, ds:data 2 data segment 3 x db 99, 72, 85, 63, 89, 97, 55 4 len equ $ - x 5 data ends 6 code segment 7 start: 8 mov ax,data 9 mov ds,ax 10 mov byte ptr ds:[len],10; 11 mov cx,7 12 mov bx,0 13 s: mov al,ds:[bx] 14 mov ah,0 15 inc bx 16 call printNumber 17 call printSpace 18 loop s 19 mov ah,4ch 20 int 21h 21 printNumber: 22 div byte ptr ds:[len]; 23 mov dx,ax;dh 24 mov ah,2 25 or dl,30h;30h 26 int 21h 27 mov ah,2 28 mov dl,dh 29 or dl,30h 30 int 21h 31 ret 32 printSpace: 33 mov dl,' ' 34 mov ah,2 35 int 21h 36 ret 37 code ends 38 end start

实验任务4
1 assume cs:code,ds:data 2 data segment 3 str db 'try' 4 len equ $ - str 5 data ends 6 code segment 7 start: 8 mov ax,data 9 mov ds,ax 10 11 mov bl,00000010B; 12 mov bh,0; 13 mov cx,3; 14 mov si,0; 15 call printStr 16 17 mov bl,00000100B 18 mov bh,24 19 mov cx,3 20 mov si,0 21 call printStr 22 23 mov ah,4ch 24 int 21h 25 printStr: 26 mov ax,0b800h; 27 mov es,ax 28 29 mov ax,0 30 mov al,bh 31 mov dx,160; 32 mul dx 33 mov di,ax 34 35 s: mov al,ds:[si] 36 mov es:[di],al; 37 inc si 38 inc di 39 mov es:[di],bl; 40 inc di 41 loop s 42 ret 43 code ends 44 end start

assume ds:data, cs:code
data segment
stu_no db '201983290345'
len equ $ - stu_no
data ends
code segment
start:
mov ax,data
mov ds,ax
mov si,offset stu_no
mov cx,2000
mov bl,00010000B
mov ax,0B800H
mov es,ax
mov bp,00
s1: inc bp
mov es:[bp],bl
inc bp
loop s1
mov bp,0F00H
mov bl,00010111B
mov cx,80
s2: mov ax, 45
mov es:[bp], ax
inc bp
mov es:[bp],bl
inc bp
loop s2
mov ax,data
mov ds,ax
mov si,offset stu_no
mov bp,0F44H
mov cx, len
s3: mov ax, ds:[si]
mov es:[bp],ax
inc si
inc bp
mov es:[bp],bl
inc bp
loop s3
code ends
end start

浙公网安备 33010602011771号