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

我的博客

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

[2009-04-14 18:09] 实验10之解决除法溢出的问题

点击查看原图
实验原理:
1.使用div指令计算最初dx内容(扩展为32位)除以cx内容,假设结果为A,余数为B
2.使用div指令计算最初(AX内容+16^4xB)除以cx内容,假设结果为C,余数为D
3.A装入dx,C装入ax,D装入CX
总结:本题关键是把数学问题考虑清楚,比如说使用div指令的时候是否会溢出,高位余数B如何处理等
下面divdw标号开始的是子程序部分
assume cs:code
code segment
  start:mov ax,4240h
  mov dx,000fh
  mov cx,0ah
  call divdw
  mov ax,4c00h
...
阅读全文 | 评论次数(1) | 浏览次数(378) | 所属类型(实验分析)

[2009-04-14 16:23] 实验10之显示字符串

标号s开始是子程序的内容,通过jcxz得到字符串长度,作为循环次数。




;说明:在指定的位置,用指定的颜色,显示一个用0结束的字符串
;参数:(dh)=行号(取值范围0-24),(dl)=列号(0-79) (cl)=颜色 ds:si指向首地址
;返回:无
assume cs:code 
data segment
  db 'welcome to masm'
data ends
stack segment
  dd 16 dup (0)
stack ends
code segment
  start:mov ax,stack
        mov ss,...
阅读全文 | 评论次数(1) | 浏览次数(370) | 所属类型(实验分析)

[2009-04-08 18:33] 实验7 寻址方式在结构化数据访问中的应用

基本思路:
1.用3个循环分别实现年份,收入和雇员信息。再用一个循环计算平均收入。
2.ds指向data,bx保存偏移地址;es指向table,di保存偏移地址

assume cs:codesg
data segment
db '1975','1976','1977','1978','1979','1980','1981','1982','1983'
db '1984','1985','1986','1987','1988','1989','1990','1991','1992'
db '1993','1994','1995'
dd 16,22,382,1356,2390,...
阅读全文 | 评论次数(1) | 浏览次数(420) | 所属类型(实验分析)

[2009-04-04 15:44] 程序7.1有错误

assume ds:data
data segment 
db 'unIX'
db 'foRK'
data ends
code segment
 start: mov al,'a'
        mov bl,'b'
        mov ax,4c00h
        int 21h
code ends
end start

结果提示error A2062: Missing or unreachable CS
我感到很费解,因为书上说assume没有也不要紧,start标号所指的内容是第一条指令。既然这样,为什么还会报错?...
阅读全文 | 评论次数(0) | 浏览次数(273) | 所属类型(读书笔记)

[2009-04-01 21:47] 实验5第6小题分析

点击查看原图
b的段地址是13f5,运行结果是
-d 13f5:0000
13F5:0000  08 00 07 00 06 00 05 00-04 00 03 00 02 00 01 00
刚开始还以为结果有问题,应该是0008怎么变成0800了?后来想到高位地址储存高8位,所以16位的字单元看起来和习惯是相反的,前8位和后8位要倒过来看
以下是代码
assume cs:code
a segment 
  dw 1,2,3,4,5,6,7,8
  a ends
b segment 
  dw 0,0,0,0,0,0,0,0
b ends
code segment
  start:...
阅读全文 | 评论次数(1) | 浏览次数(392) | 所属类型(实验分析)

[2009-04-01 20:46] 实验5第5小题内容

点击查看原图
本题要求a,b段数据相加放入c段对应单元中。
1.首先考虑的问题是,用什么寄存器存放a,b,c的段地址。只能用段寄存器cs,ds,es,ss.cs肯定不行,要放代码。用ss不是一定不行,但可能做循环比较麻烦,所以用es和ds。其中ds是a段和b段轮流用。
2.循环体中要用dx做中介改变ds内容。刚开始用的是ax,结果把al中保存的和的结果覆盖掉了。
assume cs:code
a segment
  db 1,2,3,4,5,6,7,8
a ends
b segment
  db 1,2,3,4,5,6,7,8
b ends
c segment 
  db 0,0,0,...
阅读全文 | 评论次数(1) | 浏览次数(371) | 所属类型(实验分析)

[2009-03-31 16:03] 实验4 [bx]和loop的使用(3)

点击查看原图
思考过程如图所示,调试没有问题。但是有一个地方有疑问:ip初始值是否一定是0.cs:ip一定指向第一条指令,但是,比如说第一条指令偏移为100h,是否有可能呢?这样段起始地址仍然是16的整数倍,但ip不是0?哪里规定了第一条指令ip一定为0?似乎没找到
下面是运行结果
-u 20:0
0020:0000 8CC8          MOV     AX,CS
0020:0002 8ED8          MOV     DS,AX
0020:0004 B82000        MOV     AX,0020
0020:0007 8EC0          MOV     ES,...
阅读全文 | 评论次数(2) | 浏览次数(406) | 所属类型(实验分析)

[2009-03-31 14:35] 实验4 bx和loop的使用(1)分析和代码

点击查看原图
以下代码通过了debug测试

assume cs:codesg
codesg segment
  mov ax,20h
  mov ds,ax
  mov al,0
  mov ds:[0],al
  mov cx,64
  mov bx,1
  s:mov al,bl
  mov ds:[bx],al
  inc bx
  loop s
  mov ax,4c00h
  int 21h
  codesg ends
end

总结:本题主要在考虑使用8位还是16位寄存器的时候花了一些时间。是bl,还是bx?为统一起见,最初都使用bl,但发现
ds:[b...
阅读全文 | 评论次数(1) | 浏览次数(364) | 所属类型(实验分析)