- [kanwangxue] 如果是文字的,不是特别好啊,体力活,如果文字还加点动画,那就必须顶了。 01/15 01:10
- [kanwangxue] 必须顶啊。 01/15 00:54
- [ltoiii] 既然是实现loop功能,是否要考虑s和se标号? mov bx,offset s - offset 12/09 12:09
- [xiaoyao2012] 正确 11/01 15:33
- [xuer2016] 又找到2条被我忽视的地方: 1.PUSH 和 POP 针对字单元 2.POP 不能是CS 10/26 10:57
- [xuer2016] 学习了 我书写不规范,16进制字母前不加0,后面不加H,以后要注意了。。。 10/26 10:51
- [xuer2016] 来老师这学习下 10/26 10:31
- [youthangel] 不妙,CPU的利用率一下子就上去了。还好我的处理器不是太弱,35%左右的利用率。建议博主在修改一下 10/20 08:23
- [fpamc] 在我心里她就是我的女神。 10/02 08:58
- [newpeople] 你女朋友用得了简直就是一个女神…… 10/01 08:10
- [99998888] 请您指点一下如何找到会ASSEMBLER 语言的翻译,翻译成中文或英文。我的QQ ; 9097815 07/25 09:56
- [jeremy] 我觉得你学习的挺好,可以加你扣扣吗?我的469614823 08/07 14:46
- [zhangbo0805] 哈哈, 你好呀!很希望认识你呀!我发现你学习的积极性很高!正想向您学习呢! 07/31 23:31
- [tomato] 知道了,排得还挺满。 05/29 16:35
- [tomato] 现在学习情况怎么样?在做课设二还是什么? 05/29 10:41
- [tomato] 你的留言收到了。 05/05 23:51
- [fpamc] 开始学习c咯! 05/03 21:40
- [fpamc] 居然不能发博客了……! 04/22 21:03
- [tomato] 你相册中的游戏界面我看过了,非常好,界面很漂亮,很有创造力。博主,很有潜力。加油,一定能把这个游戏做 04/20 23:46
- [fpamc] 忙了半个月,不在家,没时间学习汇编。 但是在途中想到了一个有史以来最难的程序。对于刚学完9章的我。 04/13 20:56
[2012-05-02 19:42] 第十一章作业
第十一章
检测点11.1
写出下面每条指令执行后,ZF、PF、SF、等标志位的值。
sub al,al al=0h ZF=1 PF=1 SF=0
mov al,1 al=1h ZF=1 PF=1 SF=0
push ax ax=1h ZF=1 PF=1 SF=0
pop bx bx=1h ZF=1 PF=1 SF=0
add al,bl al=2h ZF=0 PF=0 SF=0
add al,10 al=0ch ZF=0 PF=1 SF=0
mul al ax=90h ZF=0 PF=1 SF=0
add、sub、mul、div 、inc、or、and等运算指令影响标志寄存器
mov、push、pop等传送指令对标志寄存器没影响。
检测点11.2
写出下面每条指令执行后,ZF、PF、SF、CF、OF等标志位的值。
al CF OF SF ZF PF
sub al,al 0h/0000 0000b 0 0 0 1 1
mov al,10h 10h/0001 0000b 0 0 0 1 1
add al,90h a0h/1010 0000b 0 0 1 0 1
mov al,80h 80h/1000 0000b 0 0 1 0 1
add al,80h 0h/0000 0000b 1 1 0 1 1
mov al,0fch 0fch/1111 1100b 1 1 0 1 1
add al,05h 1h/0000 0001b 1 0 0 0 0
mov al,7dh 7dh/0111 1101b 1 0 0 0 0
add al,0bh 88h/1000 1000b 0 1 1 0 1
检测点11.3
(1)补全下面的程序,统计F000:0处32个字节中,大小在[32,128]的数据个数。
mov ax,0f000h
mov ds,ax
mov bx,0 ;ds:bx指向第一个字节
mov dx,0 ;初始化累加器
mov cx,32
s: mov al,[bx]
cmp al,32 ;和32进行比较
jb s0 ;如果低于al转到s0,继续循环
cmp al,128 ;和128进行比较
ja s0 ;如果高于al转到s0,继续循环
inc dx
s0: inc bx
loop s
[32,128]是闭区间,包括两端点的值
检测点11.3
(2)补全下面的程序,统计F000:0处32个字节中,大小在(32,128)的数据个数。
mov ax,0f000h
mov ds,ax
mov bx,0 ;ds:bx指向第一个字节
mov dx,0 ;初始化累加器
mov cx,32
s: mov al,[bx]
cmp al,32 ;和32进行比较
jna s0 ;如果不高于al转到s0,继续循环
cmp al,128 ;和128进行比较
jnb s0 ;如果不低于al转到s0,继续循环
inc dx
s0: inc bx
loop s
(32,128)是开区间,不包括两端点的值
检测点11.4
下面指令执行后,(ax)= 45h
mov ax,0 ;ax=0
push ax
popf ;flag置零
mov ax,0fff0h ;ax=0fff0h
add ax,0010h ;ax=0,flag为000000**010*0101b *表示未知
Pushf ;将flag的值入栈
pop ax ;将000000**010*0101b送入ax中
and al,11000101B ;设*为零,则al=01000101b=45h
and ah,00001000B ;ah=0
so,ax=45h
实验十一
letterc: ;定义子程序
;名称:letterc
;功能:将以0结尾的字符串中的小写字母转变成大写字母
;参数:ds:si指向字符串首地址
push cx
push si
ltc0: mov cl,[si] ;将内存中的字符数据放到cl中
mov ch,0 ;将ch置零
jcxz ltc2 ;当遇到结尾符'0',则会跳转到ret
cmp cl,61h ;比较字符'a'
jb ltc1 ;当小于61h时,跳转到ltc1
cmp cl,7ah ;比较字符'z'
ja ltc1 ;当大于7ah时,跳转到ltc1
and byte ptr [si],11011111b ;转换为大写
ltc1: inc si ;指向下一个字符
jmp ltc0 ;跳转到ltc0,继续扫描
ltc2: pop si
pop cx
ret ;结束子程序
检测点11.1
写出下面每条指令执行后,ZF、PF、SF、等标志位的值。
sub al,al al=0h ZF=1 PF=1 SF=0
mov al,1 al=1h ZF=1 PF=1 SF=0
push ax ax=1h ZF=1 PF=1 SF=0
pop bx bx=1h ZF=1 PF=1 SF=0
add al,bl al=2h ZF=0 PF=0 SF=0
add al,10 al=0ch ZF=0 PF=1 SF=0
mul al ax=90h ZF=0 PF=1 SF=0
add、sub、mul、div 、inc、or、and等运算指令影响标志寄存器
mov、push、pop等传送指令对标志寄存器没影响。
检测点11.2
写出下面每条指令执行后,ZF、PF、SF、CF、OF等标志位的值。
al CF OF SF ZF PF
sub al,al 0h/0000 0000b 0 0 0 1 1
mov al,10h 10h/0001 0000b 0 0 0 1 1
add al,90h a0h/1010 0000b 0 0 1 0 1
mov al,80h 80h/1000 0000b 0 0 1 0 1
add al,80h 0h/0000 0000b 1 1 0 1 1
mov al,0fch 0fch/1111 1100b 1 1 0 1 1
add al,05h 1h/0000 0001b 1 0 0 0 0
mov al,7dh 7dh/0111 1101b 1 0 0 0 0
add al,0bh 88h/1000 1000b 0 1 1 0 1
检测点11.3
(1)补全下面的程序,统计F000:0处32个字节中,大小在[32,128]的数据个数。
mov ax,0f000h
mov ds,ax
mov bx,0 ;ds:bx指向第一个字节
mov dx,0 ;初始化累加器
mov cx,32
s: mov al,[bx]
cmp al,32 ;和32进行比较
jb s0 ;如果低于al转到s0,继续循环
cmp al,128 ;和128进行比较
ja s0 ;如果高于al转到s0,继续循环
inc dx
s0: inc bx
loop s
[32,128]是闭区间,包括两端点的值
检测点11.3
(2)补全下面的程序,统计F000:0处32个字节中,大小在(32,128)的数据个数。
mov ax,0f000h
mov ds,ax
mov bx,0 ;ds:bx指向第一个字节
mov dx,0 ;初始化累加器
mov cx,32
s: mov al,[bx]
cmp al,32 ;和32进行比较
jna s0 ;如果不高于al转到s0,继续循环
cmp al,128 ;和128进行比较
jnb s0 ;如果不低于al转到s0,继续循环
inc dx
s0: inc bx
loop s
(32,128)是开区间,不包括两端点的值
检测点11.4
下面指令执行后,(ax)= 45h
mov ax,0 ;ax=0
push ax
popf ;flag置零
mov ax,0fff0h ;ax=0fff0h
add ax,0010h ;ax=0,flag为000000**010*0101b *表示未知
Pushf ;将flag的值入栈
pop ax ;将000000**010*0101b送入ax中
and al,11000101B ;设*为零,则al=01000101b=45h
and ah,00001000B ;ah=0
so,ax=45h
实验十一
letterc: ;定义子程序
;名称:letterc
;功能:将以0结尾的字符串中的小写字母转变成大写字母
;参数:ds:si指向字符串首地址
push cx
push si
ltc0: mov cl,[si] ;将内存中的字符数据放到cl中
mov ch,0 ;将ch置零
jcxz ltc2 ;当遇到结尾符'0',则会跳转到ret
cmp cl,61h ;比较字符'a'
jb ltc1 ;当小于61h时,跳转到ltc1
cmp cl,7ah ;比较字符'z'
ja ltc1 ;当大于7ah时,跳转到ltc1
and byte ptr [si],11011111b ;转换为大写
ltc1: inc si ;指向下一个字符
jmp ltc0 ;跳转到ltc0,继续扫描
ltc2: pop si
pop cx
ret ;结束子程序
评论次数(3) |
浏览次数(224) |
类型(汇编作业) |
收藏此文 |