汇编网首页登录博客注册
sissim的学习博客
博客首页博客互动【做检测题】论坛求助

我的博客

个人首页 |  我的文章 |  我的相册 |  我的好友 |  最新访客 |  文章收藏 |  论坛提问 |  友情链接 |  给我留言  
图片载入中
学习动态
好友圈
友情链接

[2010-02-11 22:43] 检测点11.1

sub al,al       zf=1        pf=1        sf=0
运算结果为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
结果为2,(al)=0000 0...
阅读全文 | 评论次数(0) | 浏览次数(618) | 所属类型(汇编作业)

[2010-02-11 00:52] 推荐博文 课程设计1

放了这么久,真不应该。

一晚上,五个小时的时间,终于……
做这个课程设计,完全应用了自顶向下的编程方法。
这样思路很清晰。
这中间,发现了很多问题。
最主要的一个就是编写子程序时,对寄存器的保护做得不够,
以致于子程序不能很放心的直接拿来用。
很多时间,都是在跟踪哪个寄存器在哪个子程序中发生了改变。

        assume  cs:codesg 
data    segment 
        db      '1975','1976','1977','1978','1979','1980','1981','1982','1983' 
        db...
阅读全文 | 评论次数(10) | 浏览次数(39884) | 所属类型(汇编作业)

[2009-11-22 10:01] 实验10 第3题

除法,要用32位除以16位,16位除以8位的话,会溢出。
余数存放下来,还要进行逆序操作。

        assume  cs:code
data    segment
        db      10 dup(0)
data    ends
stack   segment
        db      16 dup(0)
stack   ends
code    segment
start:  mov     ax,stack
        mov     ss,ax
        mov     sp,1ah
        mov     ax,...
阅读全文 | 评论次数(0) | 浏览次数(548) | 所属类型(汇编作业)

[2009-11-19 17:30] 实验10第2题

2.解决除法溢出的问题
这个公式着实费了番脑筋,int(H/N),是结果的高16位,后面第二个除法得到的结果,是X/N的第16位和余数。

程序如下:
        assume  cs:code
code    segment
start:  mov     ax,4240h
        mov     dx,000fh
        mov     cx,0ah
        call    divdw
        mov     ax,4c00h
        int     21h

divdw:  mov     bx,ax        ;将数据低16位...
阅读全文 | 评论次数(0) | 浏览次数(563) | 所属类型(汇编作业)

[2009-11-19 16:29] 实验10 第1题

1.显示字符串

做这个程序,出现了两个比较大的问题。总结如下:
第一,居然忘记设置段地址,直接将字符放到计算好的地址中,这样默认的段地址在ds中,导致屏幕无字符显示。
第二,一开始在ok标号处,直接就是ret指令,这是程序死循环。经过追踪程序,发现显示完字符串,取到0,转ok,这时ip又回到0002执行。这才意识到,执行ret之前,栈顶是刚才存入的cx的值,而不是返回地址(那一串push和pop是最后才加的)。

程序如下:
        assume  cs:code
data    segment
        db      'Welcome to masm!',...
阅读全文 | 评论次数(0) | 浏览次数(572) | 所属类型(汇编作业)

[2009-11-16 09:57] 检测点10.5

(1)call指令执行时,下一条指令的ea进栈,而call指令调用的正好是栈顶元素,所以程序顺序执行。执行后,ax=3。
可以用g命令执行验证结果,t命令涉及中断现场保护,会改变栈中的值。
H:\MYMASM>debug p195.exe
-u0 17
0CA7:0000 B8A60C        MOV     AX,0CA6
0CA7:0003 8ED0          MOV     SS,AX
0CA7:0005 BC1000        MOV     SP,0010
0CA7:0008 8ED8          MOV     DS,AX
0CA7:000A...
阅读全文 | 评论次数(1) | 浏览次数(703) | 所属类型(汇编作业)

[2009-11-14 10:39] 检测点10.4

call指令执行时,0005h进栈,程序转到ea是6的位置执行。bp存放的是sp的值,[bp]隐含寻址的段地址就是ss中的数值,[bp]寻址的就是栈顶元素。所以ax=6+5=000bh。

程序调试如下:
-a1000:0
1000:0000 mov ax,6
1000:0003 call ax
1000:0005 inc ax
1000:0006 mov bp,sp
1000:0008 add ax,[bp]
1000:000B
-u0 8
1000:0000 B80600        MOV     AX,0006
1000:0003 FFD0          ...
阅读全文 | 评论次数(1) | 浏览次数(453) | 所属类型(汇编作业)

[2009-11-14 10:39] 检测点10.3

call时,sa和ea进栈,栈顶为0008h,下一个元素为1000h。s处,栈顶出栈到ax,则ax=0008h,加法之后,ax=0010h,再次pop,bx=1000h,ax、bx相加,结果为1010h。
调试如下:
-a 1000:0
1000:0000 mov ax,0
1000:0003 call far ptr 1000:9
1000:0008 inc ax
1000:0009 pop ax
1000:000A add ax,ax
1000:000C pop bx
1000:000D add ax,bx
1000:000F
-u1000:0 d
1000:000...
阅读全文 | 评论次数(1) | 浏览次数(484) | 所属类型(汇编作业)

[2009-11-14 10:38] 检测点10.2

ax是栈顶元素出栈,其内容应该是call指令对当前ip的保存,也就是call指令后面第一个字节的地址。指令序列执行后,ax的值应该是0006h。
程序调试如下:
G:\MYMASM>debug
-a 1000:0
1000:0000 mov ax,0
1000:0003 call 7
1000:0006 inc ax
1000:0007 pop ax
1000:0008
-u 1000:0 0007
1000:0000 B80000        MOV     AX,0000
1000:0003 E80100        CALL    0007
1000:0006...
阅读全文 | 评论次数(1) | 浏览次数(432) | 所属类型(汇编作业)

[2009-11-13 14:35] 检测点10.1

段间转移时,高地址处为sa,低地址处为ea;先出栈的是ea,后出栈的是sa。
程序为:
        assume  cs:code
stack   segment
        db      16 dup (0)
stack   ends
code    segment
start:  mov     ax,stack
        mov     ss,ax
        mov     sp,16
        mov     ax,1000h
        push    ax
        mov     ax,0
        push ...
阅读全文 | 评论次数(1) | 浏览次数(550) | 所属类型(汇编作业)
页码数(5):  1  2  3  4  5