实验3 转移指令跳转原理及其简单应用编程
2021/11/28 22:40:21
本文主要是介绍实验3 转移指令跳转原理及其简单应用编程,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
------------恢复内容开始------------
任务1
assume cs:code, ds:data data segment x db 1, 9, 3 len1 equ $ - x ; 符号常量, $指下一个数据项的偏移地址,这个示例中,是3 y dw 1, 9, 3 len2 equ $ - y ; 符号常量, $指下一个数据项的偏移地址,这个示例中,是9 data ends code segment start: mov ax, data mov ds, ax mov si, offset x ; 取符号x对应的偏移地址0 -> si mov cx, len1 ; 从符号x开始的连续字节数据项个数 -> cx 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 ; 取符号y对应的偏移地址3 -> si mov cx, len2/2 ; 从符号y开始的连续字数据项个数 -> cx 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)
跳转的位移量为14-28=-14
(IP)=(IP)+位移量
28h+(-14)=14 cs:14指向s1
2)
跳转的位移量为41-57=-16
(IP)=(IP)+位移量
57h+(-16)=41 cs:41指向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
AX=0021 BX=0026 CX=076E
任务3
任务4
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 cx,len mov si,offset str mov bh,0 mov bl,2 call printStr mov si,offset str mov bh,24 mov bl,4 call printStr mov ah,4ch int 21h printStr: mov cx,len mov al,0ah mul bh add ax,0b800h mov es,ax mov di,si s: mov al,ds:[si] mov ah,bl mov es:[di],ax inc si add di,2 loop s ret code ends end start
任务5
assume cs:code, ds:data data segment stu_no db '201983290063' len = $ - stu_no data ends code segment start: mov ax, data mov ds, ax mov di, 0 call printID mov ah, 4ch int 21h printID: mov ax, 0b800h mov es, ax mov si, 1 mov al, 24 mov dl, 80 mul dl mov cx, ax printBlue: mov al, 17h ;00010111 mov es:[si], al ;填充颜色 add si, 2 loop printBlue sub si, 1 mov ax, 80 sub ax, len mov dl, 2 div dl mov dx, ax ;保存-的长度 mov cx, dx call print1 ;输出前半部分- mov cx, len s: ;输出学号 mov al, ds:[di] mov ah, 17h mov word ptr es:[si], ax inc di add si, 2 loop s mov cx, dx call print1 ;输出后半部分- ret print1: mov al, '-' mov ah, 17h mov word ptr es:[si], ax add si, 2 loop print1 ret code ends end start
总结:
这次实验编程题偏多,暴露了自己编程水平稀烂的问题()
任务1是课上讲的,直接看s:的上一行就行
任务2中call指令执行时,先将当前ip入栈或者把cs和ip入栈,然后基于xx设置后转移后的ip或者cs和ip,开始跳转。
任务3中,两位数的个位和十位正好可以通过div后的商和余数来实现,填充空格可以用实验2里面现成的
任务4和5可以看看书P189附近还有https://www.bilibili.com/video/BV1mt411R7Xv?p=143
这篇关于实验3 转移指令跳转原理及其简单应用编程的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南