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

我的博客

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

[2009-06-06 17:35] 再做实验7

整体思路:没一次循环将年份,收入,人数复制到table中正确位置的同时,将收入赋值给ax,dx,然后进行除法计算求出人均收入,然后将结果(保存在ax中)复制到table中的正确位置,整个程序只进行一次循环

具体细节
因为整个程序进行一次循环,需考虑好各个寄存器分别保存什么样的值
我的想法是
ds:数据段data的段地址,bx为便宜地址
则年份、收入、人数的偏移地址分别为[bx]+0、[bx]+84、[bx]+168
因为年份、收入均为4个字节,人数为一个字节,分别用di,si来计算每个年份的偏移地址
ss:保存table的段地址
bp:保存每个年份的偏移地址
每年的年份、...
阅读全文 | 评论次数(2) | 浏览次数(846) | 所属类型(程序实验)

[2008-05-12 09:07] 实验14

本人觉得这个程序写得比较糟糕,不能用循环指令来控制,有很多重复得代码,还请指教好的方法

assume cs:code
code segment
start:        mov al,9           ;处理显示年
        out 70H,al
        in al,71H
        mov ah,al
        mov cl,4
        shr ah,cl
        and al,00001111B
        add ah,30H
        add al,30H
        mov bx,0B800H
        mov es,bx
        mov byte ptr es:[160*12+24*2],ah
        mov byte ptr es:[160...
阅读全文 | 评论次数(4) | 浏览次数(1011) | 所属类型(程序实验)

[2008-05-12 09:03] 实验13(3)

关键:各个字符串和行数的地址

assume cs:code
code segment
        s1:db 'Good,better,best,','$'
        s2:db 'Never let it rest,','$'
        s3:db 'Till good is better,','$'
        s4:db 'And better best.','$'
        s: dw offset s1,offset s2,offset s3,offset s4
        row:db 2,4,6,8
start:        mov ax,cs
        mov ds,ax
        mov bx,offset s  ;ds:(bx)...
阅读全文 | 评论次数(1) | 浏览次数(849) | 所属类型(程序实验)

[2008-05-12 08:55] 实验13(2)

本题考查中断程序处理循环的控制

assume cs:code
code segment
start:        mov ax,cs
        mov ds,ax
        mov si,offset lp  ;ds:si中断程序地址
        mov ax,0
        mov es,ax
        mov di,200H       ;es:di存储中断程序的地址
        cld
        rep movsb        ;复制中断程序
        mov ax,0
        mov es,ax
        mov word ptr es:[7CH*4+0],200H
        mov word ptr es:[7CH*4+2],0 ;设置中断向量表
        ...
阅读全文 | 评论次数(1) | 浏览次数(723) | 所属类型(程序实验)

[2008-05-12 08:51] 实验13(1)

和检测点13.1还有书本上的例子基本类似,熟悉指令iret,int

assume cs:code
data segment
        db "Welcome to masm!",0
data ends
code segment
start:        mov ax,cs
        mov ds,ax
        mov si,offset show
        mov ax,0
        mov es,ax
        mov di,200H
        mov cx,offset showend-offset show
        cld
        rep movsb
        mov ax,0
        mov es,ax
        mov word ptr es:...
阅读全文 | 评论次数(1) | 浏览次数(813) | 所属类型(程序实验)

[2008-05-06 09:06] 试验12

思路:
(1)将中断处理程序复制到正确的位置(复制到从0000:0200开始处)
(2)设置中断向量表项中的值,使它指向中断处理程序的地址
(3)编写中断处理程序显示字符串"divide error"

源程序:

assume        cs:code
code        segment
start:        mov ax,cs
        mov ds,ax
        mov si,offset d0        ;ds:si源程序地址
        mov ax,0
        mov es,ax
        mov di,200H        ;es:di中断处理程序的地址
        mov cx,offset d0end-offset d0;中断程序的长度
        ...
阅读全文 | 评论次数(4) | 浏览次数(1042) | 所属类型(程序实验)

[2008-05-03 16:20] 实验11

letterc子程序流程:

(1)将ds:[si]中值赋给cl,判断是否为字符串的末尾(以0结束),利用jcxz跳转

(2)判断字符是否是小写字母,小写字母的范围:[97,122],用cmp命令设置标志寄存器的值,用jb,ja指令
跳转,即小于97跳转到下一字符处,大于122也跳转到下一个字符处

(3)若字符确实为小写字符,即对字符进行转变,字符的值保存在cl中,又小写字母与大写字母相差32,故
对cl执行减32操作,然后再保存再ds:[si]中即可

assume        cs:codesg
datasg        segment
        db        "Beginner's All-purp...
阅读全文 | 评论次数(1) | 浏览次数(734) | 所属类型(程序实验)

[2008-04-16 08:29] 实验10(3)

对于这个实验要解决的问题有:
(1)求得每位数字: 用书中的方法可得到每一位上的数字,但是在进行除法时要考虑到溢出的问题,这可以用除法溢出的子程序,另外用书中方法是要考虑商是否为0,除法子程序将商保存在dx(高16位)和ax(低16位)中,故用jcxz对商判断并进行跳转时需要对dx,ax都进行断,即只有DX和AX中的值均为0时才认为已经取到了数据每位的值

(2)将数字存储在正确的位置:我们除法的方法求得的数字是从低位到高位的,以12666为例,现得到个位6,再得到十位数字6...最后得到万位数字1,但是我们在存储的时候是按1,2,6,6,6的顺序存储的,这里我想了一些方法,如使用栈先存...
阅读全文 | 评论次数(5) | 浏览次数(407) | 所属类型(程序实验)

[2008-04-12 09:46] 推荐博文 实验10(1)显示字符串

根据题意认为这个实验实现时的两个要点,一是处理显示字符区的地址,另一个就是字符串的显示

(1)字符串的显示相对比较容易,用两个指针寄存器移动即可

(2)指定处显示字符区的地址的表示:显示字符区开始的物理地址为B8000H,那么可认为段地址为B800H,偏移地址从0开始,要在指定位置开始显示字符,首先必须计算指定位置的偏移地址,也就是之前总的字符所占的字节数--(指定行数-1)*80*2+(指定列数-1)*2
对于(指定行数-1)*2*80我的处理为先乘2再乘80,即先把2保存在默认的al中,然后与(指定行数-1)进行8位乘法,所得结果虽然是存储在整个ax中,但可以看到ah的值为0...
阅读全文 | 评论次数(1) | 浏览次数(795) | 所属类型(程序实验)

[2008-04-12 02:26] 实验10(2)解决除法溢出的问题

本实验主要弄清楚根据提示的公式商的高4位的值,低4位的值是怎样得来的
公式X/N=int(H/N)*65535+[rem(H/N)*65535+L]/N

int(H/N)*65535得出的值就是(X/N)的商的高4位,
也就是说(H/N)的到的商将最终存储在dx中,(我在思考的时候认定此次除法的除数是16位的,其实可以是8位的,8位的可能会减少寄存器的操作,有时间再写写)

而[rem(H/N)*65535+L]/N求出的商即为(X/N)的商的低4位,所得出的余数就是(X/N)的余数
即(H/N)所得到的余数放在dx中,将L放在ax中,再次进行除数为16位的除法

我以书中...
阅读全文 | 评论次数(2) | 浏览次数(477) | 所属类型(程序实验)
页码数(3):  1  2  3