栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

【汇编语言 王爽】实验13代码

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【汇编语言 王爽】实验13代码

实验(1)

lab13-1.Asm 代码:

assume cs:code
code segment
start:

;把int 7ch中断例程安装到0:200h处
;ds:si指向将要复制的程序地址
mov ax,cs
mov ds,ax
mov si,offset show_str

;es:di指向目的地址
mov ax,0
mov es,ax
mov di,200h

;设置循环次数cx
mov cx,offset show_str_end - offset show_str

;设置si di递增
cld

;将字符串从di:si复制到es:di
rep movsb


;设置中断向量表
;es指向0
mov ax,0
mov es,ax

;目的偏移地址为:4*n 4*n+2
mov word ptr es:[4*7ch],200h
mov word ptr es:[4*7ch+2],0

;安装程序返回
mov ax,4c00h
int 21h

;编写int 7ch中断例程
;功能:显示一个以0结尾的字符串
;参数:dh=行号(*160)dl=列号(*2)cl=颜色 ds:si指向字符串首地址
;返回:无

show_str:
push ax
push bx
push cx
push dx
push si
push di
push es

;设置es:di指向目的地址
mov ax,0b800h
mov es,ax
mov di,0 ;di必须先设置为0

;先用bx来保存参数(dh行号、dl列号)
mov bx,dx

;求列dl偏移量
mov ax,2
mov dh,0
mul dx
add di,ax ;结果低16位在ax中存放,故将di加上列偏移量

;求行dh偏移量
mov ax,160
mov dl,bh
mov dh,0
mul dx
add di,ax ;结果低16位在ax中存放,故将di加上行偏移量

;先用bl来保存颜色参数cl
mov bl,cl

;ds:si指向要复制的字符串首地址
copy:
mov cl,[si]
mov ch,0
jcxz ok
mov es:[di],cl ;放字符cl进去
inc di
mov es:[di],bl ;放颜色bl进去
inc si
inc di
jmp short copy

ok:
pop es
pop di
pop si
pop dx
pop cx
pop bx
pop ax
iret

show_str_end:
nop

code ends
end start

tlab13-1.Asm代码:

data segment
db "welcome to masm!",0
data ends

code segment
start:
mov dh,10
mov dl,10
mov cl,2

mov ax,data
mov ds,ax
mov si,0

int 7ch

mov ax,4c00h
int 21h

code ends
end start

在win 10 dosbox环境下的运行结果:

 

实验(2)

代码:

assume cs:code
code segment
start:
;1)安装
;ds:si - original int coding address
mov ax,cs
mov ds,ax
mov si,offset lp ;"lp" is short for loop

;es:di - 0:200h 被复制的地址
mov ax,0
mov es,ax
mov di,200h

;写入 0:200h
mov cx,offset lpend - offset lp
cld ;inc si,inc di
rep movsb ;copy bytes

;2)写入中断向量表 es:di=0:4*7ch 0:4*7ch+2
mov ax,0
mov es,ax
mov word ptr es:[4*7ch],200h
mov word ptr es:[4*7ch+2],0

mov ax,4c00h
int 21h

;3)新的int 7ch代码
lp:
push bp
mov bp,sp
dec cx
jcxz ok
add [bp+2],bx ;make ip to loop start

ok:
pop bp
iret

lpend:nop

code ends
end start

在win 10 dosbox环境下的运行结果:

 

实验(3)

代码:

assume cs:code
code segment

s1:
db 'this is s1','$'
s2:
db 'this is s2','$'
s3:
db 'this is s3','$'
s4:
db 'this is s4','$'
s:
dw offset s1, offset s2, offset s3, offset s4
row:
db 2,4,6,8

start:
mov ax,cs
mov ds,ax
mov bx,offset s
mov si,offset row

mov cx,4
show:
;int 10h,ah=2 放置光标
mov bh,0
mov dh,[si]
mov dl,0
mov ah,2
int 10h

;int 21h,ah=9 在光标位置显示字符串
mov dx,[bx]
mov ah,9
int 21h
inc si
add bx,2
loop show

mov ax,4c00h
int 21h

code ends
end start

在win 10 dosbox环境下的运行结果:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/292509.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号