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

我的博客

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

[2009-06-02 19:36] 王爽<<汇编语言>>实验11

这个程序比较简单,需要注意的一点是:a-z对应的ACXII码的范围为[61H-7aH](该区间为闭区间),而不是(61H-7aH)(该区间为开区间)

assume cs:code

data segment
   db "Beginner's All-puposer Symbolic Instruction Code.",0
data ends

stack segment
    dw 8 dup (0)
stack ends

code segment
start:   mov ax,data
         mov ds,ax
         mov ...
阅读全文 | 评论次数(1) | 浏览次数(390) | 所属类型(默认类型)

[2009-05-29 20:41] 对子程序一的思考

看了hanlsheng写的子程序一show_str,对比一下自己写的.区别在什么地方哪
  首先指出一个不足之处:我编写的子程序未对子程序中所有用到的寄存器中的内容保存起来,这可能造成寄存器冲突.
  其次是对于字符属性的处理:由于存放字符属性的属性的寄存器cx在接下来的程序被用到,故我将字符属性放到了栈中,而hanlsheng将字符属性保存到了另外一个寄存器中,我觉得这种做法比较好,要是将字符属性放到栈中,这样就限制了对栈的操作(因为下面还要将字符属性取出,在取出之前,所有处于字符属性之前的数据也要被取出)
  最后,在确定要读取数据偏移地址上也有一点小小的区别
  我觉得还是han...
阅读全文 | 评论次数(0) | 浏览次数(313) | 所属类型(默认类型)

[2009-05-29 18:31] 程序设计一之后的思考

刚刚写好三个子程序,感觉还可以.
  看了看程序设计一,觉得应该能很轻松拿下,但一调用show_str这个子程序就出现了问题.
  对于程序设计一,仍然采用"王爽<<汇编语言>>实验7"这个程序先将数据正确的输入到TABLE表中,然后调用子程序将TABLE表中相应的数据显示在屏幕上
   我是这么想的:先输出年份,年份输出完了后,依次为收入,人数及人均收入.由于年份在预先定义的时候已定义为字符串,故可以将其直接输出到屏幕上,由于对每年的输出都需要调用一次show_str,而共有21个年份,所以作21次循环就可以了.
   但是问题就在show_str身上,原先写这个子程序时,是按照题意...
阅读全文 | 评论次数(0) | 浏览次数(318) | 所属类型(默认类型)

[2009-05-29 09:55] 王爽<<汇编语言>>实验10 之子程序三

子程序三如下:
dtoc:   mov cx,10   ;除数为10,   
        call divdw  ;调用divdw,用于分离数据的各个位 
         push cx     ;将分离出的位送入栈中

         mov cx,dx  ;判断dx中的值是否为0,若不为0,则商不为0
        jcxz s1    ;程序顺序被执行,若为0程序跳转到标号s1处
                     ;执行,判断ax中的值是否为0,若不为0,则商
                      ;不为0 
        pop cx   ;...
阅读全文 | 评论次数(0) | 浏览次数(345) | 所属类型(默认类型)

[2009-05-28 08:12] 王爽<<汇编语言>>实验10 之子程序二

由公式X/N=int(H/N)*65536+[rem(H/N)*65536+L]/N(H为X的高十六位)(L为X的低十六位)可知:

int(H/N)*65536 为X/N的结果的高十六位

[rem(H/N)*65536+L]/N 为X/N的结果的低十六位及余数

如何实现int(H/N)*65536

H/N 为十六位除法

故可通过下面的程序段实现(被除数为H即X的高十六位)

push ax    ;将ax中的值保存起来,其作用在下个程序段中说明 
mov ax,dx
mov dx,0   ;dx与ax分别存储H的高十六位与低十六位
div cx     ...
阅读全文 | 评论次数(0) | 浏览次数(332) | 所属类型(默认类型)

[2009-05-27 18:14] 王爽<<汇编语言>>实验10 之子程序一

第一次写的子程序,注意push cx放到了循环之外,此时的问题是:第一次循环正常,但跟踪执行第二次循环时发现字符的属性输出不正确,这是为什么哪:这是由于 pop cx 将栈顶元素(即push cx,字符的属性)送入cx后,下一个内存单元的数据成为新的栈顶元素(即push si,si中的值)第二次循环时没有将cx中的值重新放入栈中,导致此次执行 pop cx 时送入cx中的值为si中的值。故属性输出不正确

show_str:   mov ax,0b800H ;字符在内存中的段地址
         mov es,ax

        push si       
        ...
阅读全文 | 评论次数(0) | 浏览次数(327) | 所属类型(默认类型)

[2009-05-26 16:13] 王爽<<汇编语言>>实验9

在80*25彩色模式下,显示器可显示25行(0-24行)每行有80个字符,每个字符占两个字节(也就是说每行有160个字节)分别存放字符ASCII码和属性。
要在屏幕中间分别显示绿色,绿底红色,白底蓝色的字串 'welcome to masm!'则绿色(02H),绿底红色(24H),白底蓝色(71H)的字符串分别对应屏幕的第11,12,13行,每行行首对应的偏移地址为6e0H,780H,820H.第一个字符w在内存中对应的偏移为64(40H)
,故其偏移地址为6e0H+40H
确定了字符串在内存中的地址,接下来就是如何将字符串输入到相应的内存单元中
这里有两种方法:
1:先将字符输入到...
阅读全文 | 评论次数(0) | 浏览次数(322) | 所属类型(默认类型)

[2009-05-25 14:24] 王爽<<汇编语言>>实验7

我们知道,对于字符,在内存中存放的是与其对应的ASCII码值.如对于
'1975',内存中存放的并不是1975本身,而是与字符'1','9','7',
'5'分别对应的ASCII码31,39,37,35,每个字符占一个字节.而对于
数据如0010H,在内存中存放的为其本身.
用-d 命令可查看某段内存中的内容.如-d 3000:0 这里显示了三部分
内容:
左边:每行行首内存单元的地址
中间:相应内存单元存放的数据
右边:若内存单元中的数据为某个字符的ASCII码,则会在该部分显示出
     相应的字符,所以我们看到了1975,1976等年份.而对于内存中属
     于...
阅读全文 | 评论次数(0) | 浏览次数(346) | 所属类型(默认类型)

[2009-05-24 17:52] 王爽<<汇编语言>>实验6(2)

本实验用[bx+si+idata]这种寻址方式定位要访问的数据,bx定位行,
si定位列,idata 为相对于行首的偏移地址,这里idata的值为3.
虽然很简单,但也要仔细认真.
大家一起加油啊


assume cs:code,ss:stack,ds:data

stack segment 

   dw 0,0,0,0,0,0,0,0

stack ends

data segment

   db '1. display      '
   db '2. brows        '
   db '3. replace      '
   db '...
阅读全文 | 评论次数(0) | 浏览次数(323) | 所属类型(默认类型)

[2009-05-22 20:03] 王爽<<汇编语言>>实验5(6)

初始化栈顶元素时注意sp的设置,实验虽然简单,
但也要认真
assume cs:code 

a segment
  
  dw 1,2,3,4,5,6,7,8,9,0aH,0bH,0cH,0dH,0eH,0fH,0ffH

a ends

b segment

  dw 0,0,0,0,0,0,0,0

c segment

code segment 

start:   mov ax,a
         mov ds,ax
  
         mov ax,b
         mov ss,ax
         mov sp,10H ...
阅读全文 | 评论次数(0) | 浏览次数(298) | 所属类型(默认类型)
『 查看更多文章 』