1.关于检测点11.2的疑问
执行第三条指令add AL, 90H后,AL=A0H,我算的结果是:CF=0,OF=0,SF=0,ZF=0,PF=1
我不明白的是,为什么答案里SF=1?
然后我有仔细的翻看了SF一节,对于数值运算时应该按有符号数还是无符号数有了这样的想法:
书中第204页提到:“CPU在执行add等指令时,就已经包含了两种含义,也将得到用一种信息来记录的两种结果”,因此,是不是在进行运算时, 8位寄存器的表示范围始终是[-128,127],而不是[0,255],所以才有即使AL=A0H < 255也有SF=1,但如果这样的话,那 A0H=160D>127,岂不是也会产生...


- [游客] 111111111111111113 04/09 01:55
- [tomato] 发现了一个错误。大家在看的时候不妨注意一下。 “2.5堆和栈中的存储内容 栈: 在函数调用时, 04/15 18:03
- [musicvs] 第一题我用一个笨方法算的: 第三条指令就是 10H+90H=A0H ,这里的16进制是补码,然 09/15 12:47
- [fontomas] 第二题已了。 如果寄存器不能保存cmp指令的逻辑结果(超范围),所以实际结果用补码表示。 是这样 08/27 17:03
- [fontomas] SF=1 ? 上面显示的不是 SF=PL吗? 原来“ NV UP EI PL NZ NA P 08/26 16:00
- [mouse] 11.12有debug的标志位显示和标志位的对应关系,可以体验查看一下^_^ 08/26 08:33
- [mouse] mul al zf=0 pf=1 sf=1 这章的答案都 08/26 08:32
- [starrynight] 我顶! 08/25 20:14
- [wuerlang] 嗯,要顶. 08/25 18:03
- [fontomas] 是啊,我本来也想用栈的,可是看到用push/pop那么多次,我就感到快要疯了,所以自作主张改了一下S 08/24 03:10
- [fontomas] 实验一下,Blog突然不能发表文章了! 08/11 21:07
[2008-08-27 15:59] 两个疑问,求解!
阅读全文 |
评论次数(2) |
浏览次数(1429) |
所属类型(汇编作业)
[2008-08-26 04:30] 检测点11.1
写出下面每条指令执行后,ZF、PF、SF等标志位的值。
sub al,al ZF=1 PF=1 SF=0
mov al,1 ZF=1 PF=1 SF=0
push ax ZF=1 PF=1 SF=0
pop bx ZF=1 PF=1 SF=0
add al,bl ZF=0 PF=0 SF=0
add al,10 ZF=0 PF=1 SF=0
mul al ...
sub al,al ZF=1 PF=1 SF=0
mov al,1 ZF=1 PF=1 SF=0
push ax ZF=1 PF=1 SF=0
pop bx ZF=1 PF=1 SF=0
add al,bl ZF=0 PF=0 SF=0
add al,10 ZF=0 PF=1 SF=0
mul al ...
阅读全文 |
评论次数(3) |
浏览次数(1391) |
所属类型(汇编作业)
[2008-08-23 19:20] 实验10.3-数值显示
在这个程序中,我定义的SI和原书中的SI不同。因为我的程序中,字符串'12666'是逆序存放在以DS:0001为起始地址的内存单元中,DS:0000中的内容为0,作为结束符。除法运算结束后,SI指向'66621'后的单元,内容也为0,所以在循环读取DS:SI中的内容到显示缓冲区时,SI应先减一。
;;;*****************************************************************************
;;;子程序描述:
;;;名称:dToC
;;;功能:将word型数据转变为表示十进制数的字符串,字符串以0结尾
;;;参数:...
;;;*****************************************************************************
;;;子程序描述:
;;;名称:dToC
;;;功能:将word型数据转变为表示十进制数的字符串,字符串以0结尾
;;;参数:...
阅读全文 |
评论次数(2) |
浏览次数(1379) |
所属类型(汇编作业)
[2008-08-23 05:16] 实验10.2-解决除法溢出的问题
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;子程序描述:
;;;名称:divDW ...
;;;子程序描述:
;;;名称:divDW ...
阅读全文 |
评论次数(3) |
浏览次数(1111) |
所属类型(汇编作业)
[2008-08-19 08:29] 实验10.1-显示字符串
写出来了,调试也通过了,可是依然遇到两个问题:
问题1:程序用Debug调试可以正常显示,但CMD下去什么都不显示(好像一闪而过),而在commmand.com下运行也可以正常显示。请问这是怎么回事?(不知道其他人是否也如此?)
PS. 175页实验9的程序可以正常显示。
问题2:程序中定义了SS段: dw 16 dup (0),但当sp取值 1AH 到 20H 时候,程序运行就会出错,请问这是怎么回事?
程序如下:
assume CS:CODESG, DS:DATASG, SS:STACKSG
STACKSG SEGMENT
dw 16 dup (0)
STAC...
问题1:程序用Debug调试可以正常显示,但CMD下去什么都不显示(好像一闪而过),而在commmand.com下运行也可以正常显示。请问这是怎么回事?(不知道其他人是否也如此?)
PS. 175页实验9的程序可以正常显示。
问题2:程序中定义了SS段: dw 16 dup (0),但当sp取值 1AH 到 20H 时候,程序运行就会出错,请问这是怎么回事?
程序如下:
assume CS:CODESG, DS:DATASG, SS:STACKSG
STACKSG SEGMENT
dw 16 dup (0)
STAC...
阅读全文 |
评论次数(3) |
浏览次数(983) |
所属类型(汇编作业)
[2008-08-12 16:21] 检测点10.5
(1)下面程序执行后,ax中的值为多少?
assume cs:code
stack segment
dw 8 dup (0)
stack ends
code segment
start:
mov ax,stack
mov ss,ax
mov sp,16
mov ds,ax
mov ax,0
call word ptr ds:[0EH]
inc ax
inc ax
inc ax
code ends
end start
答案:a...
assume cs:code
stack segment
dw 8 dup (0)
stack ends
code segment
start:
mov ax,stack
mov ss,ax
mov sp,16
mov ds,ax
mov ax,0
call word ptr ds:[0EH]
inc ax
inc ax
inc ax
code ends
end start
答案:a...
阅读全文 |
评论次数(1) |
浏览次数(446) |
所属类型(汇编作业)
[2008-08-12 15:11] 检测点10.2-10.4
检测点10.2
下面的程序执行后,ax中的值为多少?
内存地址 机器码 汇编指令
1000:0 b8 00 00 mov ax, 0
1000:3 e8 01 00 call s
1000:6 40 inc ax
1000:7 58 s:pop ax
答案: ax=6
分析:call指令执行后当前IP指向下一条指令的IP,即IP=6,压入栈中,转入标号S处执行pop ax,所以ax=6
检测点10.3
下面的程序执行后,ax中...
下面的程序执行后,ax中的值为多少?
内存地址 机器码 汇编指令
1000:0 b8 00 00 mov ax, 0
1000:3 e8 01 00 call s
1000:6 40 inc ax
1000:7 58 s:pop ax
答案: ax=6
分析:call指令执行后当前IP指向下一条指令的IP,即IP=6,压入栈中,转入标号S处执行pop ax,所以ax=6
检测点10.3
下面的程序执行后,ax中...
阅读全文 |
评论次数(1) |
浏览次数(470) |
所属类型(汇编作业)
[2008-08-12 02:45] 检测点10.1
补全程序,实现从内存1000:0000H处开始执行指令。
Assume CS:codesg, SS:stacksg
stacksg segment
db 16 dup (0)
stacksg ends
codesg segment
start:
mov ax, stacksg
mov ss ,ax
mov sp, 10H
mov ax, ________
push ax
mov ax, ________
push ax
retf
codesg ends
end start
答案:横线1填 1000H,...
Assume CS:codesg, SS:stacksg
stacksg segment
db 16 dup (0)
stacksg ends
codesg segment
start:
mov ax, stacksg
mov ss ,ax
mov sp, 10H
mov ax, ________
push ax
mov ax, ________
push ax
retf
codesg ends
end start
答案:横线1填 1000H,...
阅读全文 |
评论次数(1) |
浏览次数(407) |
所属类型(汇编作业)
[2008-08-11 23:59] 实验9
先发句牢骚:Blog老久不能发文章,搞的人都快崩溃了!
----------------------------------
分析:此题的关键就是怎么使字符在屏幕上显示,和显示的位置。
学习资料中我们知道,内存地址空间B8000H——BFFFFH为80 x 25彩色字符模式的显示缓冲区,因此,将我们要显示的数据写入B800H段中即可。屏幕共显示25行80列,因此根据显示缓冲区的段地址,可以推算出屏幕中间部分的位置。
我们还知道,一行80个字符,占160个字节,低位字节存储字符的ASCII码值,高位字节存储字符的显示属性,因此,程序中使用mov es,ax指令时,必修将字符存放在偶数...
----------------------------------
分析:此题的关键就是怎么使字符在屏幕上显示,和显示的位置。
学习资料中我们知道,内存地址空间B8000H——BFFFFH为80 x 25彩色字符模式的显示缓冲区,因此,将我们要显示的数据写入B800H段中即可。屏幕共显示25行80列,因此根据显示缓冲区的段地址,可以推算出屏幕中间部分的位置。
我们还知道,一行80个字符,占160个字节,低位字节存储字符的ASCII码值,高位字节存储字符的显示属性,因此,程序中使用mov es,ax指令时,必修将字符存放在偶数...
阅读全文 |
评论次数(4) |
浏览次数(415) |
所属类型(汇编作业)
[2008-08-11 07:14] 检测点9.3
补全程序,利用loop指令,实现在内存2000段中查找第一个值为0的byte, 找到后,将它的偏移地址存储在dx中
assume cs:code
code segment
start:
mov ax, 2000h
mov ds, ax
mov bx, 0
s:
mov cl, [bx]
mov ch, 0
____________
inc bx
loop s
ok:
dec bx
...
assume cs:code
code segment
start:
mov ax, 2000h
mov ds, ax
mov bx, 0
s:
mov cl, [bx]
mov ch, 0
____________
inc bx
loop s
ok:
dec bx
...
阅读全文 |
评论次数(9) |
浏览次数(477) |
所属类型(汇编作业)