Assembly Language
文章平均质量分 60
njutyangxiao
这个作者很懒,什么都没留下…
展开
-
实验17
assume cs:codesg datasg segment fun_table dw fun0,fun1,fun2,input,error,space fun0 db 0 read floopy,$ fun1 db 1 read floopy,$ fun2 db 2 exit program,$原创 2009-09-22 00:26:00 · 531 阅读 · 0 评论 -
检测点11.4
题目:下面的程序执行后,ax的值是多少?assume cs:codesgdatasg segment db 16 dup(0)datasg endscodesg segment start: mov ax,0 push ax popf mov ax,0fff0h add ax,0010h原创 2009-09-07 19:10:00 · 1805 阅读 · 1 评论 -
检测点13.2
判断下面说法的正误: (1)我们可以编程改变FFFF:0处的指令,使得CPU不去执行BIOS中的硬件系统检测和初始化程序。 解答:因为FFFF:0处为只读的ROM内存空间,无法编程改变。 (2)int 19h中断例程,可以由DOS提供。 解答:因为BIOS调用int 19h进行操作系统的引导,该中断例程运行在DOS之前,所以不可以由DOS提供。原创 2009-09-10 16:55:00 · 1179 阅读 · 0 评论 -
第十一章实验任务
题目:编写一个子程序,将包含任意字符,以0结尾的字符串中的小写字母转变成大写字母。分析:这里的关键是要知道小写字母的范围是[97,122]。然后做好判断就行了。 assume cs:codesgdatasg segment db "Beginners All-purpose Symbolic Instruction Code.",0datasg endscode原创 2009-09-08 00:19:00 · 637 阅读 · 0 评论 -
第十三章字符串转换为大写
题目:编写、安装7ch的中断例程。功能:将一个全是字母,以0结尾的字符串,转化为大写。参数:ds:si指向字符串的首地址应用举例:将data段中的字符串转化为大写。源代码:assume cs:codesg datasg segment db conversation,0datasg ends codesg segment start:原创 2009-09-10 10:02:00 · 768 阅读 · 0 评论 -
检测点12.1
题目(一):用debug查看内存,情况如下:0000:0000 68 10 A7 00 8B 01 70 00-16 00 9D 03 8B 01 70 00那3号中断源对应的中断处理程序的入口地址为:______解答:因为一个表项占用两个字节,高地址字单元存放段地址,低地址字单元存放偏移地址。所以3号单元的入口地址是0070:018B题目(二):存储N号中断源对应的中断处理程序入原创 2009-09-08 15:39:00 · 1394 阅读 · 0 评论 -
检查点13.1
题目:我们用7ch中断例程实现loop的功能,则上面的7ch中断例程所能进行的最大转移位移是多少?分析:参考了abcrazy的说法:虽然说这里它实现了loop的功能,通过修改ip的值使得程序在跳转到循环开始处,它把位移交给了bx来传递,因为bx所能存储的最大数是ffffh。虽然不能从某个段的偏移位置0转移到该段的偏移位置ffffh但可以从ffffh转到0处执行。因为掉用7ch中断还要设置cx,原创 2009-09-10 14:39:00 · 864 阅读 · 0 评论 -
第十三章:用7ch中断例程完成loop指令的功能
题目:用7ch中断例程完成loop指令的功能应用举例:在屏幕中间显示80个‘!’分析:这里的关键是些7ch的中断例程,和调用完中断例程后如何设置cs和ip返回到s处。中断例程的功能:(1)dec cx(2)如果cx不等于0,转到标号s处执行,否则向下执行。中断例程中如何设置cs:ip跳转到s处是这个程序的关键。由于int指令发生时是这样的:(1)得到中断类型码。(2)pushf(把标志寄存原创 2009-09-10 11:09:00 · 1300 阅读 · 0 评论 -
第十二章实验任务:编写0号中断的处理程序
题目:编写0号中断的处理程序,使得在除法溢出发生时,在屏幕中间显示字符串“divide error!”,然后返回到dos要求:仔细跟踪调试。源代码:ASSUME CS:CODESGCODESG SEGMENTSTART: ;这时设置ds:[si]指向需要复制的代码处 MOV AX,CS MOV DS,AX MOV SI,OFFSE原创 2009-09-09 14:19:00 · 3391 阅读 · 0 评论 -
第十章课程设计1(完成版)
解题思路:结合实验七和第十章的实验三就可以实现程序。 assume cs:codesgdatasg segment db 1975,1976,1977,1978,1979,1980,1981,1982,1983 db 1984,1985,1986,1987,1988,1989,1990原创 2009-09-05 17:37:00 · 521 阅读 · 0 评论 -
程序设计1初稿
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 1993,原创 2009-09-04 18:07:00 · 574 阅读 · 0 评论 -
第十章实验(三)显示单个数字
assume cs:codesg datasg segment db 10 dup(0) datasg endsstacksg segment db 16 dup(0)stacksg endscodesg segment start: mov bx,stacksg mov ss,bx mov s原创 2009-09-04 09:32:00 · 494 阅读 · 0 评论 -
检测点11.3
题目(1):补全下面的程序,统计f000:0处32个字节中,大小在[32,128]的数据的个数。分析:通过两次比较,可以得到结果。第一次先看此数据是否大于等于32,如果是否,则进行下一次循环;如果是则继续比较此数据是否小于等于128,如果是则把用于存储统计结果的寄存器的值加1;如果是否,则进行下一次循环。源代码:assume cs:codesgdatasg segment原创 2009-09-07 15:50:00 · 1596 阅读 · 0 评论 -
检测点11.1
写出下面每条指令执行后,zf、pf、sf等标志位的值。sub al,al zf=1 pf=1 sf=0mov al,1 zf=1 pf=1 sf=0push ax zf=1 pf=1 sf=0pop bx zf=1 pf=1 sf=0add al,bl zf=0 pf=0 sf=0add al,10 zf=0 pf=1 sf=原创 2009-09-06 18:47:00 · 1377 阅读 · 0 评论 -
第十章实验(三)显示data段中的数字
assume cs:codesg data segment dw 123,12666,1,8,3,38 data endsdatasg segment db 10 dup(0) datasg endsstacksg segment db 16 dup(0)stacksg endscodesg segment原创 2009-09-03 19:45:00 · 828 阅读 · 0 评论 -
第十章实验(二)除法溢出的问题
题目:进行不会产生溢出的处罚运算,被除数为dword型,除数为word型,结果为dword。参数:(ax)=dword型数据的低16位 (dx)=dword型数据的高16位 (cx)=除数返回:(dx)=结果的高16位 (ax)=结果的低16位 (cx)=余数应用举例:计算1000000/10(f4240h/0ah)解答:这里主要是运用公式X/N=int(H原创 2009-09-03 16:27:00 · 725 阅读 · 0 评论 -
第十三章:问题1
assume cs:codesgcodesg segment start: mov ax,cs mov ds,ax mov si,offset sqrtstart mov ax,0 mov es,ax mov di,0200h mov cx,offset sqrtend-offset sqr原创 2009-09-09 19:48:00 · 406 阅读 · 0 评论 -
实验13(1)
题目:编写并安装Int 7ch中端例程,功能为显示一个用0结束的字符串,中断例程安装在0000:0200h处参数:(dh)=行号,(dl)=列号,(cl)=颜色,ds:si指向字符串的首地址。以上中断例程安装成功后,对下面的程序进行单步跟踪,尤其注意int、iret指令执行前后的cs、ip和栈中的状态。 assume cs:codesg datasg segment原创 2009-09-10 19:48:00 · 512 阅读 · 0 评论 -
17.3(2)
题目:编程,编写一个接受字符串输入的程序,应该有如下功能:(1)在输入的同时需要显示这个字符串(2)一般在输入回车符后,字符串输入结束(3)能够删除已经输入的字符解答:只是写个测试程序而已 assume cs:codesg,ds:datasgdatasg segment db 4000 dup(0)datasg endscodesg segment原创 2009-09-18 15:05:00 · 516 阅读 · 0 评论 -
第十七章第二节题
题目:编程,接受用户的键盘输入,输入‘r’,将屏幕上的字符设置为红色;输入‘g’,将屏幕上的字符设置为绿色;输入‘b’时,将屏幕上的字符设置为蓝色。源代码:assume cs:codesgcodesg segment start: mov ax,0 int 16h;调用int 16h的0号功能读取键盘输入的字符,输入的字符的ascii码放在了al中原创 2009-09-17 19:07:00 · 519 阅读 · 0 评论 -
17.3(1)
题目:编程,编写一个接受字符串输入的程序,应该有如下功能:(1)在输入的同时需要显示这个字符串(2)一般在输入回车符后,字符串输入结束(3)能够删除已经输入的字符分析:我没用书上的入栈出栈写,就是先看看不用书上的方法能做出来否?实现过程在源代码中有详细的分析。源代码: assume cs:codesgdatasg segment db 1024 dup(0)原创 2009-09-17 22:59:00 · 528 阅读 · 0 评论 -
检测点17.1
题目:在int 16h中断例程中,一定要设置IF=1的指令。这种说法是对的吗?解答:开始的时候,感觉这句话应该是错的,当时是想int 16h只是从键盘缓冲区中读取数据,应该是可以不用设置IF的。但是这种说法只有在键盘数据缓冲区中有数据时正确。然而我们不能确保键盘缓冲区中会一直有数据,如果没有键盘缓冲区中没有数据,那马将会造成死锁。所以我们还是要设置IF=1使得能够响应int 9的中断。便于in原创 2009-09-17 19:29:00 · 1510 阅读 · 0 评论 -
16实验
编写包含多个功能子程序的中断例程 安装一个新的int 7ch中断例程,为显示输出提供如下功能子程序: (1)清屏 (2)设置前景色 (3)设置背景色 (4)向上滚动一行 入口参数说明: (1)用ah寄存器传递功能号:0表示清屏,1表示设置前景色,2表示设置背景色,3表示向上滚动一行; (2)对于2、3号功能,用al传送颜色值,(al)取值范围为[0,1,2,3,4,5,6,7]原创 2009-09-16 00:27:00 · 608 阅读 · 0 评论 -
实验15
题目:安装一个新的int9中断例程,功能:在dos下,按下‘A键后,除非不再松开,如果松开,就显示满屏的A;其他键照常处理。源代码:assume cs:codesgstacksg segment db 128 dup(0)stacksg endscodesg segmentstart: mov ax,stacksg mov ss,ax原创 2009-09-14 19:45:00 · 768 阅读 · 0 评论 -
检测点16.2
题目:下面的程序将datasg段的中a处的8个数据累加,结果保存到b处的字中,补全程序assume cs:codesg,es:datasgdatasg segment a db 1,2,3,4,5,6,7,8 b dw 0 datasg endscodesg segment start: ____(1)____ ____(2)_原创 2009-09-15 14:51:00 · 1211 阅读 · 2 评论 -
15.5的程序
assume cs:codesgstacksg segment db 128 dup (0)stacksg endscodesg segmentstart: mov ax,stacksg mov ss,ax mov sp,128 ;;;;;;;;;;;;;;;;;;;;;;copy the int9 interupt progr原创 2009-09-14 16:46:00 · 589 阅读 · 0 评论 -
检测点15.1
题目(一):仔细分析一下上面的int9中断例程,看看是否可以精简?对于程序段:pushfpushfpop axand ah,11111100bpush axpopfcall dword ptr ds:[0] 可以精简为:___(1)________(2)_____ 解答:因为是在int9中调用原来的int 9中断例程,而在我们进入int9这个中断原创 2009-09-14 13:47:00 · 1404 阅读 · 0 评论 -
16.3求sin值的程序
编写一个子程序,计算sin(x)。并在屏幕中间显示结果。源代码:assume cs:codesgcodesg segmentstart: mov al,60 call showsin mov ax,4c00h int 21hshowsin: jmp short show原创 2009-09-15 19:30:00 · 1446 阅读 · 0 评论 -
检测点16.1
下面的程序中将codesg段的8个数据累加,结果存储到b处的双字节中,补全程序。 assume cs:codesg codesg segment a dw 1,2,3,4,5,6,7,8 b dd 0 start: mov si,0 mov cx,8 s: mov ax,__(1)___ ad原创 2009-09-15 13:57:00 · 1427 阅读 · 4 评论 -
第十四章实验14
题目:以“年/月/日 时:分:秒”的格式,显示当前的日期、时间。分析:因为CMOS RAM中存储的时间信息的存储单元是:秒:0 分:2 时:4 日:7 月:8 年:9并且这些数据事宜BCD码的形式存储的。其次是要读取n好单元的BCD码的方法:首先是要把单元号n送给70h端口,再从71h端口中读取数据。再次是要把BCD码表示的月份以十进制的形式显示到屏幕上,这一步首先要原创 2009-09-11 18:00:00 · 574 阅读 · 0 评论 -
检测点14.2
题目:编程,用加法和移位指令计算(ax)=(ax)*10。提示,(ax)*10=(ax)*2+(ax)*8分析:这里要用到shl(shift logic left)逻辑左移,由于左移一位相当于原来的数乘以2,右移一位相当于原来的数除以2。所以(ax)*2 相当于ax左移一位,而(ax)*8相当于ax左移3位。源代码如下assume cs:codesgcodesg segment原创 2009-09-11 15:29:00 · 934 阅读 · 0 评论 -
第十四章检测点14.1
题目(1):编程,读取CMOS RAM的2号单元的内容分析:读取CMOS RAM要分两步:首先是把要读写的单元号送给70h(70h是地址端口,存放要访问的 CMOS RAM单元的地址)。其次是从端口71h(71h是数据端口,存放从选定的COMS RAM单元中读取的数据,或者要写入的数据)中读出2号单元的内容。源代码如下:assume cs:codesgcodesg segment原创 2009-09-11 14:30:00 · 1427 阅读 · 0 评论 -
第十三章实验13(3)
题目:下面的程序,分别在屏幕上的第2、4、6、8行显示4句英文诗,补全程序。assume cs:codesgcodesg segment s1: db Good,better,best,,$ s2: db Never let it rest,,$ s3: db Till good is better,,$ s4: db An原创 2009-09-11 09:33:00 · 679 阅读 · 0 评论 -
检测点11.2
题目:写出下面每条指令执行之后,zf、pf、sf、zf、pf等标志位的值sub al,al cf=0 of=0 sf=0 zf=1 pf=1mov al,10h cf=0 of=0 sf=0 zf=1 pf=1add al,90h cf=0 of=0 sf=1 zf=0 pf=1mov al,80h cf=0 of=0 sf=1 zf=0 pf=1add a原创 2009-09-06 21:19:00 · 1192 阅读 · 0 评论 -
第十章p202的程序:将一个全是字母的字符串转化为大写(用栈来传递)
题目:将一个全是字母的字符串转化为大写(用栈来传递)源码: assume cs:codesg datasg segment db conversation datasg ends stacksg segment db 16 dup(0) stacksg ends codesg segment start: mov ax,d原创 2009-09-02 14:33:00 · 663 阅读 · 0 评论 -
检测点10.5(2)
题目:下面的程序执行后,ax和bx的值是多少?assume cs:codesg stack segment dw 8 dup(0)stack endscodesg segment start: mov ax,stack mov ss,ax mov sp,10h mov word ptr ss:[0],offset s原创 2009-09-01 16:09:00 · 2144 阅读 · 3 评论 -
第六章实验任务(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 · 697 阅读 · 0 评论 -
第六章的实验任务(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 · 927 阅读 · 0 评论 -
检测点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 · 1052 阅读 · 1 评论 -
第七章大写字母小写字母的转换问题
题目:将datasg中的第一个字符串转化为大写,第二个字符串转换为小写。分析:小写字母的ASCII码值比大写字母的ASCII码值大20H,也就说把大写字母加上20h就是小写字母了,把小写字母减去20h就是大写字母。但是问题的关键在于我们要先判断者这个字母是不是大写或者小写,确定其大小写之后,才能做出相应的处理。然而我们目前已经学习到的指令还不能作出这样的判断.另一种是除了第5位外,大写字母和小原创 2009-08-24 16:49:00 · 2360 阅读 · 0 评论