汇编语言(王爽)
- 格式:ppt
- 大小:8.01 MB
- 文档页数:315


王爽《汇编语⾔》(第三版)实验10解析
1、显⽰字符串
assume cs:code
data segment
db 'welcome to masm!',0
data ends
code segment
start: mov dh,8
mov dl,3
mov cl,2
mov ax,data
mov ds,ax
mov si,0
call show_str
mov ax,4c00h
int 21h
show_str: push dx
push cx
push si ; 保护⼦程序寄存器中⽤到的寄存器
; 由于主程序的限定
; 这⾥由CPU⾃动为我们分配栈空间
mov di,0 ;显⽰缓存区中的偏移量
mov bl,dh
dec bl ; bl-1才是真正的⾏,因为⾏号从0开始计数
mov al,160
mul bl ; 每⾏160字节 ⽤ ⾏数*每⾏偏移量 得到⽬标⾏的偏移量
mov bx,ax ; mul bl之后,乘积存储在ax中,这⾥要转存⼊bx中
mov al,2 ; 列的偏移量为2,两个字节代表⼀列!!!
mul dl ; 与⾏偏移量同理
add bl,al ;将列偏移量与⾏偏移量相加,得到指定位置的偏移量。
mov ax,0b800h
mov es,ax ;指定显⽰缓存区的内存位置
mov al,cl ; 由于后⾯jcxz语句的判断要⽤到cx,所以我们要将
; cl(颜⾊)先存下来。
s: mov ch,0
mov cl,ds:[si] ;⾸先将当前指向字符串的某个字符存⼊cx中
jcxz ok ; 如果cx为0,则转移到ok标号执⾏相应代码
mov es:[bx+di],cl ;将字符传⼊低地址
mov es:[bx+di+1],al ; 将颜⾊传⼊⾼地址
add di,2 ; 列偏移量为2
inc si ; 字符串的偏移量为1
loop s ; 不为0,继续复制
ok: pop dx
第一章
检测点1.1
1) 13
(2) 1024,0,1023
(3) 8192,1024
(4) 2^30,2^20,2^10
(5) 64,1,16,4
(6) 1,1,2,2,4
(7) 512,256
(8) 二进制
注:符号'^'指求幂运算(如: 2^30指2的30次方)
第二章
检测点2.1
(1)大家做这题的时候一定要注意,要看清楚数制,比如是二进制还是十进制,还是十六进,我当时没注意,做错了!!呵呵!!
第一空:F4A3H
第二空:31A3H
第三空:3123H
第四空:6246H
第五空:826CH
第六空:6246H
第七空:826CH
第八空:04D8H
第九空:0482H
第十空:6C82H
第十一空:D882H
第十二空:D888H
第十三空:D810H
第十四空:6246H
(2)
mov ax,2
add ax,ax
add ax,ax
add ax,ax
检测点2.2
(1)00010H 1000fH
(2)0001H 2000H
检测点2.3
共修改了4次ip 第一次mov ax,bx 第二次是sub ax,ax 第三次是jmp ax 第四次是执行 jmp
ax 最后ip的值是0 因为ax的值是零!!
检测点3.1
(1)
第一空:2662H
第二空:E626H
第三空:E626H
第四空:2662H
第五空:D6E6H
第六空:FD48H
第七空:2C14H
第八空:0000H
第九空:00E6H
第十空:0000H
第十一空:0026H
第十二空:000CH
注意:ax中存取的是字型数据 ,高地址存放高字节,低地址存放低字节!!(一定要小心)
(2)
①写出cpu的执行序列
Mov ax,6622
Jmp 0ff0:0100
Mov ax,2000H
Mov ds,ax
Mov ax ,[0008]
Mov ax,[0002]
②
指令执行顺序
汇编语言答案
检测点1.1(第8页)(1)13
(2)1024,0,1023
(3)8192,1024
(4)2^30,2^20,2^10
(5)64,1,16,4
(6)1,1,2,2,4
(7)512,256
(8)二进制
注意:1.第4题中的符号'^'指求幂运算(如:2^30指2的30次方)
检测点2.1(第18页)----------------------
(1)写出每条汇编指令执行后相关寄存器中的值。
第一空:F4A3H
第二空:31A3H
第三空:3123H
第四空:6246H
第五空:826CH
第六空:6246H
第七空:826CH
第八空:04D8H
第九空:0482H
第十空:6C82H
第十一空:D882H
第十二空:D888H
第十三空:D810H
第十四空:6246H(2)只能使用目前学过的汇编指令,最多使用4条指令,编程计算2的4次方。
解答如下:movax,2
addax,ax
addax,ax
addax,ax
检测点2.2(第23页)----------------------
(1)00010H,1000FH
(2)1001H,2000H
第2题说明:
因为段的起始地址要为16的倍数。所以当段地址小于1001H或大于2000H时CPU都无法
寻到。
检测点2.3(第33页)
答:CPU修改了4次IP的值。情况如下:
第1次:执行完movax,bx后
第2次:执行完subax,ax后
第3次:读入jmpax后
第4次:执行完jmpax后
最后IP的值为0
实验1查看CPU和内存,用机器指令和汇编指令编程(第33页)-----------------------------------------------------
1.预备知识:Debug的使用
2.实验任务(第43页)
(1)
(2)
(3)
通过DEBUG中的D命令查看到主板的生产日期[以月、日、年,分隔符为'/'的格式]存储在
内存ffff:0005~ffff:000C(共8个字节单元中)处。此生产日期不能被改变,因为其具有‘只读’
实验九 根据材料编程
【实验内容】
在屏幕中间分别显示绿色、绿底红色、白底蓝色的字符串
‘welcome to masm!’
【实验过程】
;程序名:t9-12.asm
data segment
string db 'welcome to masm!'
len equ $-string
data ends
code segment
assume cs:code
start:
mov ah,0 ;设置显示方式
mov al,3 ;80*25彩色文本显示方式
int 10h
mov bp,seg string ;回送变量或标号的段地址
mov es,bp
mov bp,offset string
mov cx,len ;cx=串长度
mov dh,9
mov dl,30 ;dx=起始行列号
mov al,0 ;光标返回的起始位置
mov bl,02h
mov ah,13h ;显示字符串
int 10h
mov cx,len ;cx=串长度
mov dh,10
mov dl,30 ;dx=起始行列号
mov al,0 ;光标返回的起始位置
mov bl,24h
mov ah,13h ;显示字符串
int 10h
mov cx,len ;cx=串长度
mov dh,11
mov dl,30 ;dx=起始行列号
mov al,0 ;光标返回的起始位置
mov bl,71h
mov ah,13h ;显示字符串
int 10h
mov ah,4ch
int 21h
code ends
end start
【实验结果】