ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2021-11-27 09:31:07  阅读:151  来源: 互联网

标签:24 ah 编程 mov si 指令 bp 跳转 ax


实验任务1:

 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

 

问题1:反汇编机器码

 

    得到机器码 E2F2 偏移地址即为F2,求补码可得偏移地址为-14

    因为Loop指令的地址是0019,s1开始的地址是000D,Loop指令地址加上指令长度减去s1的地址,偏移量就是-14

 

 

问题2:反汇编机器码

 

        得到机器码 E2F0,偏移量为F0,求补码可得偏移量为-16、

问题3:问题1的截图:                                                                            问题2的截图:

             


 

实验任务2:

问题1: 

 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=0021 BX=0026 CX=???

Debug结果:

 

 

 思考:

  

 

 

       当执行 call指令时,先把当前的IP存起来,当前IP指向下一条命令,地址为0021,于是0021入栈,接着执行POP AX,于是AX的值就是0021

  接着执行call指令,IP指向下一条指令的地址为0026.于是0026入栈,接着执行POP BX. 接着执行POP CX,但此时栈为空,不知道为什么CX的值为076C。

 


实验任务3:

 

 



 

 

 


 

实验任务5:

 1 assume ds:data, cs:code
 2 
 3 data segment
 4     stu_no db '201983290431'
 5     len  = $ - stu_no
 6 data ends
 7 
 8 code segment
 9 start:
10     mov ax,data
11     mov ds,ax
12 
13     mov si,0
14     mov cx,07D0h;
15     mov bh,0  
16     mov bl,00010111B;对应蓝底白字
17     call printK
18     mov si,0
19     mov cx,004Fh;
20     mov bh,24  ;绿色字符显示在第24行
21     mov bl,00010111B;对应蓝底白字
22     call printF
23     mov si,0
24     mov cx,len;字符串长度为len赋值给cx
25     mov bh,24  ;绿色字符显示在第24行
26     mov bl,00010111B;对应蓝底白字
27     call printStr
28 
29   
30     mov ax,4c00h
31     int 21h
32 
33 
34     printStr:
35     mov ax,0b800h  ;80*25字符缓冲区
36     mov es,ax
37 
38     mov al,bh
39     mov bh,0a0h   ;一行是160个字节,即a0.总共偏移24行,即24*160个字节
40     mul bh             ;mul默认al和mul后面的寄存器相乘,结果放在ax中
41     add ax,4ah
42     mov bp,ax
43     s:
44     mov ah,ds:[si];每次取出一个字节给ah
45     mov es:[bp],ah;把字母存给显存地址低八位中
46     inc bp
47     mov es:[bp],bl;将颜色信息存入高八位
48     inc bp
49     inc si
50     loop s
51     ret
52 
53     printF:
54     mov ax,0b800h  ;80*25字符缓冲区
55     mov es,ax
56 
57     mov al,bh
58     mov bh,0a0h   ;一行是160个字节,即a0.总共偏移24行,即24*160个字节
59     mul bh     
60     mov bp,ax
61     s1:
62     mov ah,'-';每次取出一个字节给ah
63     mov es:[bp],ah;把字母存给显存地址低八位中
64     inc bp
65     mov es:[bp],bl;将颜色信息存入高八位
66     inc bp
67     inc si
68     loop s1
69     ret
70 
71     printK:
72     mov ax,0b800h  ;80*25字符缓冲区
73     mov es,ax
74 
75     mov al,bh
76     mov bh,0a0h   ;一行是160个字节,即a0.总共偏移24行,即24*160个字节
77     mul bh     
78     mov bp,ax
79     s2:
80     mov ah,' ';每次取出一个字节给ah
81     mov es:[bp],ah;把字母存给显存地址低八位中
82     inc bp
83     mov es:[bp],bl;将颜色信息存入高八位
84     inc bp
85     inc si
86     loop s2
87     ret
88     
89 
90 
91 code ends
92 end start

 

 

标签:24,ah,编程,mov,si,指令,bp,跳转,ax
来源: https://www.cnblogs.com/xiaodaidai666/p/15610641.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有