p190的源程序如下:
assume cs:codesg
stack segment
db 16 dup (0)
stack ends
codesg segment
mov ax,4c00h
int 21h
start: mov ax,stack
mov ss,ax
mov sp,16
mov ax,0
push ax
mov bx,0
ret
codesg ends
end start
然后
D:\masm>debug ...


- [waiwai] 楼上的,注意了,按这个结构,两个mov cx,4都是必须的哦 01/08 15:34
- [游客] 代码好像 mov cx 4 有点多余了 01/08 15:09
- [malachi] 9.1.2 中的 jmp dword ptr ds:[0] 是在 ds:[0] 处取一个字型数据 给 08/21 10:17
- [malachi] 是想早上起来纠正错误的。。。 08/21 10:11
- [coco] 楼主起得很早啊。 08/21 09:39
- [malachi] 昨天人傻了。。。我已经明白怎么回事了 08/21 07:55
- [xiaochong] 9.1.1 使IP的值经跳转后变为0,则需保证ds:[bx+1]处的字型单元数据为0000H,所以定 08/19 14:44
- [sysnap] 我看还不错:-) 08/18 15:15
- [malachi] 这个问题不知道怎么回答好,呵呵 我是这样想的:如果段中的数据占N个字节,则程序加载后,该段实际占有 08/18 13:25
- [crazyman] 程序没问题! 08/18 11:37
[2008-08-20 23:51] ret指令搞的我头好晕 大家指点下
阅读全文 |
评论次数(3) |
浏览次数(974) |
所属类型(汇编作业)
[2008-08-19 09:43] 检测点 9.1 、9.2、 9.3以及一些疑问
检测点9.1
9.1.1了使IP的值经跳转后变为0,则需保证ds:[bx+1]处的字型单元数据为0000H,所以定义3个字节型数据0就符合“应该”的要求
dw 0,0,0
9.1.2 补全程序,使jmp指令执行后,CS:IP指向程序的第一条指令。
assume cs:code,ds:data
data segment
dd 12345678h
data ends
code segment
start: mov ax,data
mov ds,ax
mov bx,0
mov [bx],__ ; 这空不知...
9.1.1了使IP的值经跳转后变为0,则需保证ds:[bx+1]处的字型单元数据为0000H,所以定义3个字节型数据0就符合“应该”的要求
dw 0,0,0
9.1.2 补全程序,使jmp指令执行后,CS:IP指向程序的第一条指令。
assume cs:code,ds:data
data segment
dd 12345678h
data ends
code segment
start: mov ax,data
mov ds,ax
mov bx,0
mov [bx],__ ; 这空不知...
阅读全文 |
评论次数(2) |
浏览次数(1009) |
所属类型(汇编作业)
[2008-08-09 11:32] 检测点6.1解题
(1).
程序的数据段,是在以CS为段地址 ,因此根据题意在写出入时,段地址就是CS,偏移地址从0H起,每次以2为步进单位的字单元内。
assume cs:codesg
codesg segment
dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
start: mov ax,0
mov ds,ax
mov bx,0
mov cx,8
s: mov ax,[bx]
mov cs:[bx],ax ;此条指令为所填指令
a...
程序的数据段,是在以CS为段地址 ,因此根据题意在写出入时,段地址就是CS,偏移地址从0H起,每次以2为步进单位的字单元内。
assume cs:codesg
codesg segment
dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
start: mov ax,0
mov ds,ax
mov bx,0
mov cx,8
s: mov ax,[bx]
mov cs:[bx],ax ;此条指令为所填指令
a...
阅读全文 |
评论次数(1) |
浏览次数(814) |
所属类型(汇编作业)
[2008-08-03 21:52] 检测点3.2解题
(1) 补全下面的程序,使其可以将10000H~1000FH中的8个字,逆序拷贝到20000H~2000FH中,逆序拷贝的含义如图3.17所示(图中内存里的数据均为假设):
mov ax,1000H ;传送数据到AX,AX=1000H
mov ds,ax ;从AX中传送数据到DS段寄存器,DS=1000H
;补全程序如下:
mov ax,2000H ;传送数据到AX,AX=2000H
mov ss,ax ;从AX中传送数据到SS栈寄存器,定义栈段,SS=2000H
mov sp,0010H ;定义栈顶地址,SP=0010H,执行完后SS...
mov ax,1000H ;传送数据到AX,AX=1000H
mov ds,ax ;从AX中传送数据到DS段寄存器,DS=1000H
;补全程序如下:
mov ax,2000H ;传送数据到AX,AX=2000H
mov ss,ax ;从AX中传送数据到SS栈寄存器,定义栈段,SS=2000H
mov sp,0010H ;定义栈顶地址,SP=0010H,执行完后SS...
阅读全文 |
评论次数(1) |
浏览次数(795) |
所属类型(汇编作业)
[2008-08-03 00:28] 检测点3.1个人解题思路
(1)在Debug中 用"d 0:0 1f"查看内存,结果如下:
0000:0000 70 80 F0 30 EF 60 30 E2-00 80 80 12 66 20 22 60
0000:0010 62 26 E6 D6 CC 2E 3C 3B-AB BA 00 00 26 06 66 88
下面的程序执行前,AX=0,BX=0,写出每条汇编指令执行完后相关寄存器中的值。
解:
mov ax,1 将数据1传送到寄存器AX
mov ds,ax DS=0001H 将寄存器AX中的数据传送到段寄存器DS
mov ax,[000...
0000:0000 70 80 F0 30 EF 60 30 E2-00 80 80 12 66 20 22 60
0000:0010 62 26 E6 D6 CC 2E 3C 3B-AB BA 00 00 26 06 66 88
下面的程序执行前,AX=0,BX=0,写出每条汇编指令执行完后相关寄存器中的值。
解:
mov ax,1 将数据1传送到寄存器AX
mov ds,ax DS=0001H 将寄存器AX中的数据传送到段寄存器DS
mov ax,[000...
阅读全文 |
评论次数(1) |
浏览次数(827) |
所属类型(汇编作业)
[2008-07-30 19:55] 检测点2.3个人解题思路
答:CPU修改了4次IP的值。
情况如下:
第1次:执行完mov ax,bx后
第2次:执行完sub ax,ax后
第3次:读入jmp ax后
第4次:执行完jmp ax后
最后IP的值为0
因为sub ax,ax 之后ax 为0 ,
jmp ax之后IP的值为ax的值 所以最后IP为0...
情况如下:
第1次:执行完mov ax,bx后
第2次:执行完sub ax,ax后
第3次:读入jmp ax后
第4次:执行完jmp ax后
最后IP的值为0
因为sub ax,ax 之后ax 为0 ,
jmp ax之后IP的值为ax的值 所以最后IP为0...
阅读全文 |
评论次数(3) |
浏览次数(371) |
所属类型(汇编作业)
[2008-07-30 19:19] 检测点2.2个人解题思路
(1) 给定段地址为0001H,公通过变化偏移地址寻址,CPU的寻址范围为 10H 到 1000FH
解:给定段地址为0001H,侧可得出基础地址=0001H*16=10H,偏移地址16位,变化范围最小0,最大FFFFH,所以CPU的寻址范转最小为10H+0=10H,最大寻址范围为10H+FFFFH=1000FH.
(2) 有一数据存放在内存20000H单元中,现给定段地址为SA,若想用偏移地址寻到此单元,则SA应满足的条件是最小为 1001H,最大为 2000H
解:已知数据存放在内存20000H单元中,偏移地址EA为十六位,最小范围0000H,最大FFFFH,求段地...
解:给定段地址为0001H,侧可得出基础地址=0001H*16=10H,偏移地址16位,变化范围最小0,最大FFFFH,所以CPU的寻址范转最小为10H+0=10H,最大寻址范围为10H+FFFFH=1000FH.
(2) 有一数据存放在内存20000H单元中,现给定段地址为SA,若想用偏移地址寻到此单元,则SA应满足的条件是最小为 1001H,最大为 2000H
解:已知数据存放在内存20000H单元中,偏移地址EA为十六位,最小范围0000H,最大FFFFH,求段地...
阅读全文 |
评论次数(1) |
浏览次数(303) |
所属类型(汇编作业)
[2008-07-30 19:03] 关于“物理地址=16*段地址+偏移地址”
终于搞懂了“物理地址=16*段地址+偏移地址”
百度来的 在pfan上面查到的 呵呵。之前我一直根据树上的数据来乘,就是不得所解。
16d=10h.
上面的这个回答好精辟 真正解我之惑
另外个回答就比较教科书,呵呵
为什么物理地址=16d*段地址+偏移地址?
因为物理地址是20位,而段寄存器是16位,普通寄存器(例如放偏移地址)也是16位
由硬件原因施行错位相加,段地址左移一位相当于扩大16倍(一位16进制数四位二进制数)...
百度来的 在pfan上面查到的 呵呵。之前我一直根据树上的数据来乘,就是不得所解。
16d=10h.
上面的这个回答好精辟 真正解我之惑
另外个回答就比较教科书,呵呵
为什么物理地址=16d*段地址+偏移地址?
因为物理地址是20位,而段寄存器是16位,普通寄存器(例如放偏移地址)也是16位
由硬件原因施行错位相加,段地址左移一位相当于扩大16倍(一位16进制数四位二进制数)...
阅读全文 |
评论次数(1) |
浏览次数(341) |
所属类型(汇编作业)
[2008-07-20 17:58] 检测点2.1个人解题思路和总结,并有点小疑问
mov ax,62627 AX=F4A3H 将十进制数值传送给寄存器AX,并用十六进制表示
mov ah,31H AX=31A3H 将十六进制数值31H传送给寄存器AX的高八位ah
mov al,23H AX=3123H 将十六进制数值23H传送给寄存器AX的低八位al
add ax,ax AX=6246H 将寄存器AX中的值相加,并将结果存在寄存器AX中
mov bx,826CH BX=826CH 将十六进制数值826CH传送给寄存器BX
mov cx,ax CX=6246H 将寄存器A...
mov ah,31H AX=31A3H 将十六进制数值31H传送给寄存器AX的高八位ah
mov al,23H AX=3123H 将十六进制数值23H传送给寄存器AX的低八位al
add ax,ax AX=6246H 将寄存器AX中的值相加,并将结果存在寄存器AX中
mov bx,826CH BX=826CH 将十六进制数值826CH传送给寄存器BX
mov cx,ax CX=6246H 将寄存器A...
阅读全文 |
评论次数(3) |
浏览次数(335) |
所属类型(汇编作业)
[2008-07-19 13:29] 1.1检测点个人解题思路
1.1-1.10检测点的题和本人的解题思路,忘指证,谢谢!
(1) 1个CPU的寻址能力为8KB,那么它的地址总线的宽度为: 13
解:因为CPU的地址总线宽度为N,则它可以寻找2的N次方个内存单元,已知它的寻址能力为8KB,8KB=8*1024=8192个内存单元,那么地址总线宽度则可算为2的N次方等于8192,求N的结果等于13
(2) 1KB的存储器有:1024个存储单元,存储单元的编号从:0到1023
解:因为一个存储单元可以存储一个字节即1B,而1KB=1024B,所以为1024个存储单元,而存储单元的编号是从0开始的,所以编号是从0到1023
(3)...
(1) 1个CPU的寻址能力为8KB,那么它的地址总线的宽度为: 13
解:因为CPU的地址总线宽度为N,则它可以寻找2的N次方个内存单元,已知它的寻址能力为8KB,8KB=8*1024=8192个内存单元,那么地址总线宽度则可算为2的N次方等于8192,求N的结果等于13
(2) 1KB的存储器有:1024个存储单元,存储单元的编号从:0到1023
解:因为一个存储单元可以存储一个字节即1B,而1KB=1024B,所以为1024个存储单元,而存储单元的编号是从0开始的,所以编号是从0到1023
(3)...
阅读全文 |
评论次数(3) |
浏览次数(452) |
所属类型(汇编作业)
页码数(1):
1