- 博客(36)
- 资源 (9)
- 收藏
- 关注
原创 第九章实验九
题目:编程:在屏幕中间分别显示绿色、绿底红色、白底蓝色的字符串welcome to masm!分析:根据书上的背景知识,我们知道绿色 对应的属性字节是0000 0010即02h,绿底红色的属性字节是0010 0100即24h,白底蓝色的属性字节是0111 0001即71h。第二是计算屏幕中央的行数和列数的值,我们从材料了解到实验用到的是80*25彩色字符模式,其显示器可以显示25行,每行8
2009-08-31 16:22:00 1168
原创 第九章实验8
题目:分析下面的程序,在运行前思考:这个程序可以返回吗?运行后分析:为什么会是这个结果?assume cs:codesgcodesg segment mov ax,4c00h int 21hstart: mov ax,0 s: nop nop mov di,offset s mov si,offs
2009-08-31 09:50:00 508
原创 检查点9.3
题目:补全编程,利用loop指令,实现在内存2000h段中查找第一个值为0的字节,找到后,将它的偏移地址存储在dx中。源代码:assume cs:codesg codesg segment start: mov ax,2000h mov ds,ax mov bx,0 s: mov cl,[bx]
2009-08-29 23:15:00 571
原创 检查点9.2
题目:补全编程,利用jcxz指令,实现在内存2000h段中查找第一个值为0的字节,找到后,将它的偏移地址存储在dx中。assume cs:codesgcodesg segment start: mov ax,2000h mov ds,ax mov bx,0 s: _________ ____
2009-08-29 22:43:00 816
原创 检查点9.1的三道题
题目(1):程序如下,如要使程序中的jmp指令执行后,cs:ip指向程序的第一条指令,在datasg段中应该定义哪些数据。assume cs:codesg,ds:datasgdatasg segment ?datasg enscodesg segment start: mov ax,datasg mov ds,a
2009-08-29 20:58:00 767
原创 第九章问题1
问题:有如下程序,填写两条指令,使该程序在运行中将s处的一条指令复制到s0处。assume cs:codesgcodesg segment s: mov ax,bx mov si,offset s mov di,offset s0 ________________ ________________ s0:
2009-08-28 15:25:00 656
原创 第八章实验七(目前的最终版)
题目:Power idea公司从1975成立一直到1995年的基本情况被定义到了datasg中,编程将datasg段中的数据写入到table段中,并计算21年中的人均收入(取整),结果保存到table段中写在前面:因为对之前实验七的三个版本都不满意,在做了一些参考之后,有了这个版本分析:刚开始时一看到那张表就吓了一下,不过冷静分析后发现,其实也不难。我这里用的是分模块处理,同时运用到了栈。
2009-08-28 10:48:00 1586
原创 第八章实验7的第二种做法(用栈做传递)
只用一个循环,但是用栈来传递。源代码:assume cs:codesgdatasg segment db 1975,1976,1977,1978,1979,1980,1981,1982,1983 db 1984,1985,1986,1987,1988,1989,1990,1991,
2009-08-28 09:32:00 517
原创 第八章实验7的第二种做法(不用栈做传递)
只用一个循环assume cs:codesgdatasg segment db 1975,1976,1977,1978,1979,1980,1981,1982,1983 db 1984,1985,1986,1987,1988,1989,1990,1991,1992 db
2009-08-28 00:30:00 491
原创 第八章实验七
题目:Power idea公司从1975成立一直到1995年的基本情况被定义到了datasg中,编程将datasg段中的数据写入到table段中,并计算21年中的人均收入(取整),结果保存到table段中分析:刚开始时一看到那张表就吓了一下,不过冷静分析后发现,其实也不难。我这里用的是分模块处理,同时运用到了栈。以table的0~f空间为例说明。即:首先要准确定位datasg段取得年份,写入t
2009-08-27 16:36:00 742
原创 第八章问题1
题目:用div计算data段中第一个数据除以第二个数据后的结果,商存在第三个数据的存储单元中。源代码:assume cs:codesg ,ds:datasgdatasg segment dd 100001 dw 100 dw 0 datasg endscodesg segment start: mov ax,d
2009-08-27 00:27:00 458
原创 8.6寻址方式的综合运用
assume cs:codesg,ds:datasgdatasg segment db dec db ken oslen dw 137 dw 40 db pdp datasg endscodesg segment start: mov ax,datasg mov ds,ax
2009-08-26 17:50:00 649
原创 第七章问题7.9
编程:将datasg段中的每个单词的前4个字母改为大写字母。解答:思路和上一篇一样,用自定义的堆栈段来存放需要存储的临时变量。只是要注意的是si的初始值要改为3,因为每个单词的前3个字符不是属于单词的,单词的开始数字为3(从0数起)。源代码:assume cs:codesg,ds:datasgdatasg segment db 1. display
2009-08-26 12:22:00 654
原创 问题7.8有关循环改进的问题
在上一篇中我们使用了ds来存储外层循环的值,等到内存循环结束之后,再把外层循环的值从dx中提取出来,送还给cx中。但是如果dx也被占用了呢?虽然我们还可以使用别的寄存器,但是cpu的寄存器还是有限的。如8086cpu就只有14个寄存器。在前一篇文章中,si,cx,ax,bx都不能用来存储cx的值,因为这些寄存器在循环中也可能要被使用到。cs,ip,ds不能用,因为cs:ip时刻都是指向当前的指令,
2009-08-26 10:47:00 406
原创 第七章 问题7.7和7.8
题目:将datasg段中的每个单词改写成大写字母分析:这里要知道的两个问题。1:知道如何把字母转换成大写。把其ascii码的第五位设置成0就是大写,设置成1就是小写。2:在datasg段定义的4个单词,每个的存储长度都是10h。然后可以用二维数组的概念来理解。其三:这里要应用到[bx+si+idata]的形式。源代码:assume cs:codesg,ds:datasgdat
2009-08-25 16:51:00 463
原创 第七章 问题7.6
题目:将datasg段中的每个单词的头一个字母改为大写字母。分析:这里要知道的两个问题。1:知道如何把字母转换成大写。把其ascii码的第五位设置成0就是大写,设置成1就是小写。2:在datasg段定义的6个单词,每个的存储长度都是10h。然后可以用二维数组的概念来理解。其三:这里可以看出每个单词的首字母都是位于3这个位置(从0数起)。源代码:assume cs:codesg,ds:d
2009-08-25 16:13:00 429
原创 问题7.2
题目:用si和di将字符串welcome to masm! 复制到他后面的数据区中。解答:第一种是没用si和di的,源代码如下1:assume cs:codesg,ds:datasgdatasg segment db welcome to masm! db ................ datasg endscodesg segmen
2009-08-25 00:17:00 479
原创 第七章大写字母小写字母的转换问题
题目:将datasg中的第一个字符串转化为大写,第二个字符串转换为小写。分析:小写字母的ASCII码值比大写字母的ASCII码值大20H,也就说把大写字母加上20h就是小写字母了,把小写字母减去20h就是大写字母。但是问题的关键在于我们要先判断者这个字母是不是大写或者小写,确定其大小写之后,才能做出相应的处理。然而我们目前已经学习到的指令还不能作出这样的判断.另一种是除了第5位外,大写字母和小
2009-08-24 16:49:00 2411
原创 对第六章实验任务(6)的修正
对第六章实验任务(6)的修正,上篇中得到的结果并没有逆序排序,现在修正如下:源代码: assume cs:codesg 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 b ends codesg segment
2009-08-24 15:04:00 477
原创 第六章实验任务(6)
题目:编写程序,用push指令将a段中的前8个字型数据逆序存储到b段中。解答:源代码:assume cs:codesga segment dw 1,2,3,4,5,6,7,8,9,0ah,0bh,0ch,0dh,0eh,0fh,0ffha endsb segment dw 0,0,0,0,0,0,0,0b endscodesg segment
2009-08-24 09:38:00 547
原创 第六章实验任务(5)
题目:编写程序,将a段和b段中的数据依次相加,将结果存在c段中。解答:这道题有两个思路,第一种是不用栈来传递数据,而是借用ds、ss和es来完成。源代码1:assume cs:codesga segment db 1,2,3,4,5,6,7,8a endsb segment db 1,2,3,4,5,6,7,8b endsc se
2009-08-23 23:39:00 573
原创 第六章实验任务(3、4)
题目:将下面的程序编译连接,用debug加载、跟踪,然后回答问题。源代码:assume cs:codesg,ds:datasg,ss:stacksgcodesg segmentstart: mov ax,stacksg mov ss,ax mov sp,16 mov ax,datasg mov ds,ax
2009-08-23 19:27:00 604
原创 第六章实验任务(2)
题目:将下面的程序编译连接,用debug加载、跟踪,然后回答问题。源代码:assume cs:codesg,ds:datasg,ss:stacksgdatasg segment dw 0123h,0456hdatasg endsstacksg segment dw 0,0stacksg endscodesg segment
2009-08-23 13:28:00 712
原创 第六章的实验任务(1)
题目:将下面的程序编译连接,用debug加载、跟踪,然后回答问题。源代码:assume cs:codesg,ss:stacksg,ds:datasgdatasg segment dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987hdatasg endsstacksg segment dw 0
2009-08-23 11:23:00 943
原创 检测点6.1第二题
题目:用程序实现依次用内存0:0~0:15单元中的内容改写程序中的数据,数据的传说用栈来进行。栈空间设置在程序内。解答:源代码:assume cs:codesgcodesg segment dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h dw 0,0,0,0,0,0,0,0,0,0start: mov
2009-08-23 08:22:00 1057 1
原创 检查题6.1第二题
<br />题目:用程序实现依次用内存0:0~0:15单元的内容改写程序中的数据,数据的传说用栈来进行。栈空间设置在程序内。<br />解答:<br />源代码如下:<br />assume cs:codesgcodesg segment dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h dw 0,0,0,0,0,0,0,0,0,0start: mov ax,cs mov ss,ax mov
2009-08-23 01:12:00 404
原创 检测点6.1第一题
题目:实现依次用内存0:00:15单元中的内容改写程序中的数据解答:源代码;assume cs:codesgcodesg segment dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987hstart: mov ax,0 mov ds,ax mov bx,0 mov
2009-08-23 00:10:00 730
原创 第六章在代码段中使用栈6.2程序
题目:利用栈,将程序中定义的数据逆序存放。代码:assume cs:codesgcodesg segment dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h dw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0;dw定义了16个字型数据,在程序加载后,将取得16个字的内存空间,存放;着这16个
2009-08-22 22:03:00 603
原创 第六章包含多个段的程序6.1
1.程序源码如下,主要是为了得出assume cs:codesgcodesg segment dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cabh,0987h mov bx,0 mov ax,0 mov cx,8 s:add ax,cs:[bx] add bx,2 loop s
2009-08-21 23:34:00 648
原创 第五章实验四第三题
题目:下面的程序功能是将“mov ax,4c00h"之前的指令复制到内存0:200处,补全程序。上机调试,跟踪运行结果代码:assume cs:codesgcodesg segment mov ax,__(1)__ mov ds,ax mov ax,0020h mov es,ax mov bx,0 mov cx,_
2009-08-21 18:25:00 979
原创 第五章实验四的第一题
题目:编程,向内存0:200~0:23f依次传送数据0~63(3fh)。1.分析:首先0:200~0:23f可以看成是段地址0020,偏移地址范围是0~3fh。其次此题应该采用循环来实现。2.源代码编写:assume cs:codesgcodesg segment mov ax,0020h mov ds,ax mov bx,0h mov cx
2009-08-21 16:08:00 781
原创 5.3在Debug中跟踪用loop指令实现的循环程序
问题:计算ffff:0006单元中的数乘以3,结果存储在dx中。解答:一:分析思路:1.运算后的结果是否会超出dx所能存储的范围? ffff:0006单元中的书是一个字节型的数据,8位的,其范围在0到2的八次方之间,取其最大值是2的8次方,即255。则用它和3相乘后的值是255×3=765=02fdh。而dx所能存储的最大数值是2的16次方,即65535=0ffffh,很明显的是02
2009-08-21 08:50:00 3222
原创 问题5.1、5.2、5.3
5.1题目:一段内存21000h~210007h,21000h处存放BE,210001处存放00,执行以下指令后内存的情况。解答:mov ax,2000h;//把2000h送入ax中mov ds,ax; //把ax的内容即2000h送入段寄存器ds中mov bx,1000h;//把1000h送入bx中mov ax,[bx]; //把内存单元((ds)*16+(bx))的内容
2009-08-20 23:46:00 640
原创 第四章:实验任务
(1)将t1.asm编译生成可执行文件t1.exe. 解答如下:进入安装有masm.exe和link.exe的文件夹,我的是tools。然后敲入masm ******编译t1.asm生成目标文件t1.obj****** Microsoft (R) Macro Assembler Version 5.00 Copyright (C) Microsoft Corp 1981-1985, 1
2009-08-20 22:19:00 1262
原创 程序执行过程的跟踪:(用debug来跟踪一个程序的运行过程) 整理总结
1.理由:在DOS中运行一个程序的时候,是由command将程序可执行文件中加载入内存, 并得以执行的。但是我们看不到程序逐步执行的过程,因为command的程序加载和设置cs:IP指向程序的入口的操作是连续完成的,而当cs:ip一指向程序的入口,command就放弃了cpu的控制权,cpu立即开始执行程序,直到程序结束。 2.目的:为了观察程序的执行过程,可以使用Debug。Debug可以把程序
2009-08-20 22:16:00 10739 1
原创 第三章的实验任务
1.使用debug,将下面的程序段写入内存,逐条执行,根据指令执行后的实际运行情况填空。 ******set ds****** MOV AX,FFFF MOV DS,AX;设置数据段地址为ffff ******set ss and sp****** MOV AX,2200 MOV SS,AX MOV SP,0100;设置栈顶为:2200:0100 ******把FFFF
2009-08-20 22:02:00 1645 1
《微积分之屠龙宝刀+微积分之倚天宝part4(4-4)
2009-10-14
《微积分之屠龙宝刀+微积分之倚天宝part3(4-3)
2009-10-14
《微积分之屠龙宝刀+微积分之倚天宝 part2(4-2)
2009-10-14
80x86保护模式系列教程
2009-09-28
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人