王爽_汇编语言_第二版答案_全-.pdf

上传人:索**** 文档编号:76191871 上传时间:2023-03-08 格式:PDF 页数:50 大小:317.86KB
返回 下载 相关 举报
王爽_汇编语言_第二版答案_全-.pdf_第1页
第1页 / 共50页
王爽_汇编语言_第二版答案_全-.pdf_第2页
第2页 / 共50页
点击查看更多>>
资源描述

《王爽_汇编语言_第二版答案_全-.pdf》由会员分享,可在线阅读,更多相关《王爽_汇编语言_第二版答案_全-.pdf(50页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、1 第 1 章 基础知识检测点 1.1(1)1 个 CPU 的寻址能力为 8KB,那么它的地址总线的宽度为13。(2)1KB 的存储器有 1024个存储单元。存储单元的编号从0 到 1023。(3)1KB 的存储器可以存储1024*8 个 bit,1024个 Byte。(4)1GB、1MB、1KB分别是 230、220、210 Byte。(nm 的意思是 n 的 m次幂)(5)8080、8088、80286、80386的地址总线宽度分别是16 根、20 根、24 根、32根,则它们的寻址能力分别为:64(KB)、1(MB)、16(MB)、4(GB)。(6)8080、8088、8086、8028

2、6、80386的数据总线宽度分别为8 根、8 根、16 根、16 根、32 根。则它们一次可以传送的数据为:1(B)、1(B)、2(B)、2(B)、4(B)。(7)从内存中读取 1024 字节的数据,8086 至少要读 512 次、80386至少要读 256次。(8)在存储器中,数据和程序以二进制形式存放。第 2 章 寄存器 答案检测点 2.1(1)写出每条汇编指令执行后相关寄存器中的值。mov ax,62627 AX=F4A3H mov ah,31H AX=31A3H mov al,23H AX=3123H add ax,ax AX=6246H mov bx,826CH BX=826CH m

3、ov cx,ax CX=6246H mov ax,bx AX=826CH add ax,bx AX=04D8H mov al,bh AX=0482H mov ah,bl AX=6C82H add ah,ah AX=D882H add al,6 AX=D888H add al,al AX=D810H mov ax,cx AX=6246H(2)只能使用目前学过的汇编指令,最多使用4 条指令,编程计算2 的 4 次方。解:mov ax,2 add ax,ax add ax,ax add ax,ax 2 检测点 2.2(1)给定段地址为 0001H,仅通过变化偏移地址寻址,CPU 的寻址范围为 000

4、10H到 1000FH。(2)有一数据存放在内存 20000H 单元中,先给定段地址为SA,若想用偏移地址寻到此单元。则SA应满足的条件是:最小为1001H,最大为 2000H。检测点 2.3 下面的 3 条指令执行后,CPU 几次修改 IP?都是在什么时候?最后IP 中的值是多少?mov ax,bx sub ax,ax jmp ax 解:修改 4 次;第一次在 CPU 读取“mov ax,bx”后,第二次在 CPU 读取“sub ax,ax”后,第三次在 CPU读取“jmp ax”后,第四次在CPU 执行完“mov ax,bx”后;最后 IP 中的值为 0。实验 1 查看 CPU 和内存,用

5、机器指令和汇编指令编程1.略2.(1)略(2)略(3)查看内存中的内容。PC机主板上的 ROM 中写有一个生产日期,在内存 FFF00H FFFFFH 的某几个单元中,请找出这个生产日期并试图改变它。解:内存 FFF00HFFFFFH 为 ROM 区,内容可读但不可写。(4)向内存从 B8100H开始的单元中填写数据,如:-e B810:0000 01 01 02 02 03 03 04 04 请读者先填写不同的数据,观察产生的现象;在改变填写的地址,观察产生的现象。解:8086的显存地址空间是A0000H BFFFFH,其中 B8000H BFFFFH 为 80*25彩色字符模式显示缓冲区,

6、当向这个地址空间写入数据时,这些数据会立即出现在显示器上。第 3 章 寄存器(内存访问)3 检测点 3.1(1)在 Debug中,用“d 0:0 1f”查看内存,结果如下。0000:0000 70 80 F0 30 EF 60 30 E2-00 80 80 12 66 20 22 60 0000:0010 62 26 E6 D6 CC 2E 3C 3B-AB BA 00 00 26 06 66 88 下面的程序执行前,AX=0,BX=0,写出每条汇编指令执行完后相关寄存器的值。mov ax,1 mov ds,ax mov ax,0000 AX=2662Hmov bx,0001 BX=E626H

7、 mov ax,bx AX=E626Hmov ax,0000 AX=2662Hmov bx,0002 BX=D6E6H add ax,bx AX=FD48H add ax,0004 AX=2C14H mov ax,0 AX=0000H mov al,0002 AX=00E6Hmov bx,0 BX=0000H mov bl,000C BX=0026Hadd al,bl AX=000CH(2)内存中的情况如图3.6 所示各寄存器的初始值:CS=2000H,IP=0,DS=1000H,AX=0,BX=0;写出 CPU执行的指令序列(用汇编指令写出)。写出 CPU执行每条指令后,CS、IP 和相关寄

8、存器中的数值。再次体会:数据和程序有区别吗?如何确定内存中的信息哪些是数据,哪些是程序?解:初始值:CS=2000H,IP=0,DS=1000H,AX=0,BX=0 mov ax,6622H AX=6622H 其他寄存器保持不变,以下同理jmp 0ff0:0100 CS=0ff0H,IP=0100H mov ax,2000H AX=2000H mov ds,ax DS=20000H mov ax,0008 AX=C389H mov ax,0002 AX=EA66H 没有区别,被 CS:IP 指向的信息是程序;被传送、运算等指令操作的是数据。检测点 3.2(1)补全下面的程序,使其可以将1000

9、0H 1000FH中的 8 个字,逆序复制到4 200000H 2000FH中。逆序复制的含义如图3.17 所示(图中内存里的数据均为假设)。mov ax,1000H mov ds,ax mov ax,2000H mov ss,ax mov sp,10H push 0 push 2 push 4 push 6 push 8 push A push C push E(2)补全下面的程序,使其可以将100000H 1000FH中的 8 个字,逆序复制到200000H 2000FH中。mov ax,2000H mov ds,ax mov ax,1000H mov ss,ax mov sp,0 pop

10、 E pop C pop A pop 8 pop 6 pop 4 pop 2 pop 0 实验 2 用机器指令和汇编指令编程1.预备知识:Debug的使用略2.实验任务(1)使用 Debug,将上面的程序段写入内存,逐条执行,根据指令执行后的实际运行情况填空。mov ax,ffff 5 mov ds,ax mov ax,2200 mov ss,ax mov sp,0100 mov ax,0;ax=58EA add ax,2;ax=5CCA mov bx,4;bx=30F0 add bx,6;bx=6021 push ax;sp=00FE;修改的内存单元的地址是220FE,内容为 5CCA pu

11、sh bx;sp=00FC;修改的内存单元的地址是220FC,内容为 6021 pop ax;sp=00FE;ax=6021 pop bx;sp=0100;bx=5CCA push 4;sp=00FE;修改的内存单元的地址是220FE,内容为 30F0 push 6;sp=00FC;修改的内存单元的地址是220FC,内容为 2F31 注:内存中的数据会因机器、环境而异(2)仔细观察图 3.19 中的实验过程,然后分析:为什么 2000:02000:f 中的内容会发生改变?解:t 命令为单步中断,CPU会保护现场,即顺序把标志寄存器、CS、IP 入栈,此题是关于后面章节的中断问题。第 4 章 第

12、一个程序实验 3 编程、编译、连接、跟踪(1)将下面的程序保存为t1.asm,将其生成可执行文件ti.exe。assume cs:codesg codesg segment mov ax,2000h mov ss,ax mov sp,0 add sp,10 pop ax pop bx push ax 6 push bx pop ax pop bx mov ax,4c00h int 21h codesg ends end 解:略(2)用 Debug跟踪 t1.exe 的执行过程,写出每一步执行后,相关寄存器中的内容和栈顶的内容。解:7(3)PSP 的头两个字节是 CD20,用 Debug加载 t

13、i.exe,查看 PSP的内容。解:8 第 5 章 BX 和 loop 指令实验 4 bx 和 loop 的使用(1)编程,向内存 0:200 0:23F 依次传送数据 063(3FH)。解:assume cs:codesg codesg segment mov ax,0 mov ds,ax mov bx,200H mov al,0 mov cx,64 s:mov bx,al inc bx inc al loop s mov ax,4c00h int 21h codesg ends end(2)编程,向内存 0:200 0:23F 依次传送数据 063(3FH),程序中只能使用9条指令,9 条

14、指令中包括“mov ax,4c00h”和“int 21h”。9 解:assume cs:codesg codesg segment mov ax,20h mov ds,ax mov bx,0 mov cx,64 s:mov bx,bl inc bx loop s mov ax,4c00h int 21h codesg ends end(3)下面的程序的功能是将“mov ax,4c00h”之前的指令复制到内存0:200 处,补全程序。上机调试,跟踪运行结果。assume cs:code code segment mov ax,cs mov ds,ax mov ax,0020h mov es,ax

15、 mov bx,0 mov cx,17h s:mov al,bx mov es:bx,al inc bx loop s mov ax,4c00h int 21h code ends 10 end 第 6 章 包含多个段的程序检测点 6.1(1)下面的程序实现依次用内存0:0 0:15 单元中的内容改写程序中的数据,完成程序:assume cs:codesg codesg segment dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h start:mov ax,0 mov ds,ax mov bx,0 mov cx,8 s:mov ax,bx

16、 mov cs:bx,ax add bx,2 loop s mov ax,4c00h int 21h codesg ends end start(2)下面的程序实现依次用内存0:0 0:15 单元中的内容改写程序中的数据,数据的传送用栈来进行。栈空间设置在程序内。完成程序:assume cs:codesg codesg segment 11 dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h dw 0,0,0,0,0,0,0,0,0,0;10个字单元用栈空间start:mov ax,cs mov ss,ax mov sp,36 mov ax,0

17、 mov ds,ax mov bx,0 mov cx,8 s:push bx pop cs:bx add bx,2 loop s mov ax,4c00h int 21h codesg ends end start 实验 5 编写、调试具有多个段的程序(1)将下面的程序编译连接,用Debug加载、跟踪,然后回答问题assume cs:code,ds:data,ss:stack data segment 12 dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h data ends stack segment dw 0,0,0,0,0,0,0,0

18、stack ends code segment start:mov ax,stack mov ss,ax mov sp,16 mov ax,data mov ds,ax push ds:0 push ds:2 pop ds:2 pop ds:0 mov ax,4c00h int 21h code ends end start CPU执行程序,程序返回前,data 段中的数据为多少?解:不变 CPU执行程序,程序返回前,cs=155ch、ss=155bh、ds=155ah。(此题结果因环境而异,但相对差值不变)设程序加载后,code 段的段地址为 X,则 data 段的段地址为 X-2,stac

19、k 段的段地址为 X-1。(2)将下面的程序编译连接,用Debug加载、跟踪,然后回答问题assume cs:code,ds:data,ss:stack data segment dw 0123H,0456H data ends stack segment dw 0,0 stack ends 13 code segment start:mov ax,stack mov ss,ax mov sp,16 mov ax,data mov ds,ax push ds:0 push ds:2 pop ds:2 pop ds:0 mov ax,4c00h int 21h code ends end sta

20、rt CPU执行程序,程序返回前,data 段中的数据为多少?解:不变 CPU执行程序,程序返回前,cs=155ch、ss=155bh、ds=155ah。(此题结果因环境而异,但相对差值不变)设程序加载后,code 段的段地址为 X,则 data 段的段地址为 X-2,stack 段的段地址为 X-1。对于如下定义的段:name segment,name ends 如果段中的数据占N个字节,则程序加载后,这段实际占有的空间为(N/16+1)*16.(N/16为取整数部分)(3)将下面的程序编译连接,用Debug加载、跟踪,然后回答问题assume cs:code,ds:data,ss:stac

21、k code segment start:mov ax,stack mov ss,ax mov sp,16 mov ax,data 14 mov ds,ax push ds:0 push ds:2 pop ds:2 pop ds:0 mov ax,4c00h int 21h code ends data segment dw 0123H,0456H data ends stack segment dw 0,0 stack ends end start CPU执行程序,程序返回前,data 段中的数据为多少?解:不变 CPU执行程序,程序返回前,cs=155ah、ss=155eh、ds=155d

22、h。(此题结果因环境而异,但相对差值不变)设程序加载后,code 段的段地址为 X,则 data 段的段地址为 X+3,stack 段的段地址为 X+4。(4)如果将(1)、(2)、(3)题中的最后一条伪指令“end start”改为“end”(也就是说不指明程序的入口),则那个程序仍然可以正确执行?请说明原因。解:(1)、(2)不能正确执行(入口默认为data 段的第一条指令),(3)能正确执行。如果不指明程序的入口,编译器自动默认整个代码的第一条指令为程序的入口。(经 qingxh1 指正,在此鸣谢)(5)程序如下,编写 code 段中的内容,将 a 段和 b 段中的数据依次相加,将结果存

23、到 c 段中。assume cs:code 15 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,0,0,0,0,0 c ends code segment start:mov ax,a mov ds,ax mov bx,0 mov cx,8 s:mov al,ds:bx add al,ds:bx+16 mov ds:bx+32,al inc bx loop s mov ax,4c00h int 21h code ends end start(6)程序如下,编写

24、 code 段中的代码,用 push 指令将 a 段中的前 8 个字型数据,逆序存储到 b 段中。assume cs:code 16 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 code segment start:mov ax,a mov ds,ax mov bx,0 mov ax,b mov ss,ax mov sp,16 mov cx,8 s:push bx inc bx inc bx loop s mov ax,4c00h i

25、nt 21h code ends end start 第 7 章 更灵活的定位内存地址的方法实验 6 实践课程中的程序(1)略(2)编程,完成问题 7.9 中的程序。编程,将 datasg 段中每个单词的前4 个字母改写为大写字母。17 assume cs:codesg,ss:stacksg,ds:datasg stacksg segment dw 0,0,0,0,0,0,0,0 stacksg ends datasg segment db 1.display db 2.brows db 3.replace db 4.modify datasg ends codesg segment star

26、t:mov ax,stacksg mov ss,ax mov sp,16 mov ax,datasg mov ds,ax mov bx,0 mov cx,4 s0:push cx mov si,0 mov cx,4 s:mov al,bx+si+3 and al,11011111b mov bx+si+3,al inc si loop s add bx,16 18 pop cx loop s0 mov ax,4c00h int 21h codesg ends end start 第 8 章 数据处理的两个基本问题实验 7 寻址方式在结构化数据访问中的应用编程,将 data 段中的数据按如下格式

27、写入到table 段中,并计算 21 年中的人均收入(取整),结果也按照下面的格式保存在table段中。解:assume cs:codesg,ds:data,es:table 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;以上是表示 21 年的 21 个字符串dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514

28、dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000;以上是表示 21 年公司总收的 21 个 dword 型数据dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226 dw 11542,14430,45257,17800;以上是表示 21 年公司雇员人数的 21 个 word 型数据19 data ends table segment db 21 dup(year summ ne?)table ends codesg se

29、gment start:mov ax,data mov ds,ax mov si,0 mov ax,table mov es,ax mov di,0 mov cx,21 s:mov ax,ds:si;年份转送mov es:di,ax mov ax,ds:si+2 mov es:di+2,ax mov ax,ds:si+84;收入转送mov es:di+5,ax mov dx,ds:si+84+2 mov es:di+7,dx push cx;保护 cx mov cx,ds:84+84+bx;雇员数转送mov es:di+0ah,cx div cx;计算人均收入pop cx mov es:di+

30、0dh,ax;人均收入转送add si,4 add bx,2 add di,16 20 loop s mov ax,4c00h int 21h codesg ends end start 第 9 章 转移指令的原理检测点 9.1(1)程序如下。assume cs:code data segment db 0,0,0 data ends code segment start:mov ax,data mov ds,ax mov bx,0 jmp word ptr bx+1 code ends end start 若要使程序中的 jmp 指令执行后,CS:IP 指向程序的第一条指令,在data 段中

31、应该定义哪些数据?(2)程序如下。assume cs:code,ds:data data segment dd 12345678h data ends 21 code segment start:mov ax,data mov ds,ax mov bx,0 mov bx,bx mov bx+2,cs jmp dword ptr ds:0 code ends end start 补全程序,使 jmp 指令执行后,CS:IP 指向程序的第一条指令。(3)用 Debug查看内存,结果如下:2000:1000 BE 00 06 00 00 00.则此时,CPU 执行指令:mov ax,2000H mo

32、v es,ax jmp dword ptr es:1000H 后,(CS)=?,(IP)=?解:CS=0006H,IP=00BEH 检测点 9.2补全编程,利用 jcxz 指令,实现在内存 2000H段中找查第一个值为为0 的字节,找到后,将它的偏移地址存储在dx 中。assume cs:code code segment start:mov ax,2000H mov ds,ax mov bx,0 s:mov ch,0 22 mov cl,bx jcxz ok inc bx jmp short s ok:mov dx,bx mov ax,4c00h int 21h code ends end

33、start 检测点 9.3补全程序,利用 loop 指令,实现在内存2000H段中查找第一个值为0 的字节,找到后,将它的偏移地址存储在dx 中。assume cs:code code segment start:mov ax,2000h mov ds,ax mov bx,0 s:mov cl,bx mov ch,0 inc cx inc bx loop s ok:dec bx mov dx,bx mov ax,4c00h int 21h code ends end start 实验 8 分析一个奇怪的程序分析下面的程序,在运行前思考:这个程序可以正确返回吗?运行后再思考:为什么是这种结果?通

34、过这个程序加深对相关内容的理解。23 assume cs:codesg codesg segment mov ax,4c00h int 21h start:mov ax,0 s:nop nop mov di,offset s mov si,offset s2 mov ax,cs:si mov cs:di,ax s0:jmp short s s1:mov ax,0 int 21h mov ax,0 s2:jmp short s1 nop codesg ends end start 解:可以正常返回,jmp short s1的机器码是 EBF6,即使当前的 IP=IP-10,将这条指令移动到 s:

35、处后,jmp short s1不会指到 s1 了,而是指到相对当前位置(jmp short s1 的下一条指令)的-10 的位置(mov ax,4c00h),所以这个程序可以正常返回。实验 9 根据材料编程编程:在屏幕中间分别显示绿色、绿底红色、白底蓝色的字符串welcome to masm!。解:24 assume cs:code data segment db welcome to masm!data ends code segment start:mov ax,data mov ds,ax mov ax,0b800h mov es,ax mov si,0 mov di,10*160+80

36、;第十行中间mov cx,16 s1:mov al,ds:si mov ah,00000010B;绿色mov es:di,ax inc si inc di inc di loop s1 mov si,0 mov di,11*160+80;第十一行中间mov cx,16 s2:mov al,ds:si mov ah,00100100B;绿底红色mov es:di,ax inc si inc di inc di loop s2 mov si,0 mov di,12*160+80;第十二行中间mov cx,16 s3:mov al,ds:si mov ah,01110001B;白底蓝色mov es:

37、di,ax inc si inc di inc di 25 loop s3 mov ax,4c00h int 21h;如果要看到完整的显示请输入:“-g 4c”,即立即运行到此条指令code ends end start 注:此程序如果利用后面所学知识,可以将三次显示嵌套简化为一次。第 10 章 CALL 和 RET指令检测点 10.1补全程序,实现从内存1000:0000 处开始执行指令。assume cs:code stack segment db 16 dup(0)stack ends code segment start:mov ax,stack mov ss,ax mov sp,16

38、 mov ax,1000h push ax mov ax,0 push ax retf code ends end start 检测点 10.2下面的程序执行后,ax 中的数值为多少?内存地址机器码 汇编指令1000:0 b8 00 00 mov ax,0 1000:3 e8 01 00 call s 26 1000:6 40 inc ax 1000:7 58 s:pop ax 解:ax=6 检测点 10.3下面的程序执行后,ax 中的数值为多少?内存地址机器码 汇编指令1000:0 b8 00 00 mov ax,0 1000:3 9a 09 00 00 10 call far ptr s

39、1000:8 40 inc ax 1000:9 58 s:pop ax add ax,ax pop bx add ax,bx 解:ax=1010h 检测点 10.4下面的程序执行后,ax 中的数值为多少?内存地址机器码 汇编指令1000:0 b8 06 00 mov ax,6 1000:2 ff d0 call ax 1000:5 40 inc ax 1000:6 mov bp,sp add ax,bp 解:ax=11 检测点 10.5(1)下面的程序执行后,ax 中的数值为多少?注:不能用单步中断测试程序,中断涉及堆栈操作,不能带便 CPU的真实执行结果。assume cs:code sta

40、ck segment 27 dw 8 dup(0)stack ends code segment start:mov ax,stack mov ss,ax mov sp,16 mov ds,ax mov ax,0 call word ptr ds:0EH inc ax inc ax inc ax mov ax,4c00h int 21h code ends end start 解:ax=3(2)下面的程序执行后,ax 中的数值为多少?assume cs:code stack segment dw 8 dup(0)stack ends code segment start:mov ax,stac

41、k mov ss,ax mov sp,16 mov word ptr ss:0,offset s mov ss:2,cs call dword ptr ss:0 nop s:mov ax,offset s sub ax,ss:0cH mov bx,cs sub bx,ss:0eH mov ax,4c00h int 21h code ends end start 28 解:ax=1,bx=0 实验 10 编写子程序1.显示字符串;名称:show_str;功能:在屏幕的指定位置,用指定颜色,显示一个用0 结尾的字符串;参数:(dh)=行号,(dl)=列号(取值范围 080),(cl)=颜色,ds:

42、si:该字符串的首地址;返回:显示在屏幕上assume cs:daima shuju segment db fghfghf,0 shuju ends daima segment kaishi:mov dh,8 mov dl,21 mov cl,2 mov ax,shuju mov ds,ax mov si,0 call show_str mov ax,4c00h int 21h;-show_str:push ax push cx push dx push es push si push di mov ax,0b800h mov es,ax dec dh 29 mov al,160 mul dh

43、 add dl,dl mov dh,0;计算显示在屏幕位置add ax,dx mov di,ax mov ah,cl x:mov cl,ds:si mov ch,0 jcxz f mov al,cl mov es:di,ax inc si inc di inc di jmp x f:pop di pop si pop es pop dx pop cx pop ax ret;-daima ends end kaishi 2.解决除法溢出问题;名称:divdw;功能:除法,被除数32 位,除数 16 位,商 32 位,余数 16 位,不会溢出;参数:(dx)=被除数高 16 位,(ax)=被除数低

44、 16 位,(cx)=除数;返回:(dx)=商高 16 位,(ax)=商低 16 位,(cx)=余数assume cs:daima daima segment kaishi:mov ax,2390 30 mov dx,0 mov cx,10 call divdw mov ax,4c00h int 21h;-divdw:push bx push ax mov ax,dx mov dx,0 div cx mov bx,ax pop ax div cx mov cx,dx mov dx,bx pop bx ret;-daima ends end kaishi 3.数值显示;名称:dtoc_word;

45、功能:将一个 word 型数转化为字符串;参数:(ax)=word型的数据,ds:si指向字符串的首地址;返回:ds:si放此字符串,以 0 结尾assume cs:daima shuju segment db 20 dup(1)shuju ends daima segment kaishi:mov ax,shuju mov ds,ax mov ax,10100 31 call dtoc_word mov ax,4c00h int 21h;-dtoc_word:push ax push bx push cx push dx push si mov bx,0 x:mov dx,0 mov cx,

46、10 div cx mov cx,ax add dx,0 push dx inc bx jcxz f jmp x f:mov cx,bx x1:pop ds:si inc si loop x1 pop si pop dx pop cx pop bx pop ax ret;-daima ends 32 end kaishi 课程设计 1任务:将实验 7 中的 Power idea 公司的数据按照图10.所示的格式在屏幕上显示出来。解:;注:函数中的标号为防止冲突,都加了本函数名为前缀;在 Debug中输入“-g 90”,直接运行到结束assume cs:code data segment db

47、1975,1976,1977,1978,1979,1980,1981,1982,1983 db 1984,1985,1986,1987,1988,1989,1990,1991,1992 db 1993,1994,1995;以上是表示 21 年的 21 个字符串dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514 dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000;以上是表示 21 年公司总收的 21 个 dword 型数据dw

48、 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226 dw 11542,14430,45257,17800;以上是表示 21 年公司雇员人数的 21 个 word 型数据data ends agency segment db 8 dup(0)agency ends 33 code segment start:mov ax,0b800h mov es,ax mov di,0 mov cx,80*24 x:mov byte ptr es:di,;将屏幕清空mov byte ptr es:di+1,0 inc di in

49、c di loop x mov ax,data mov es,ax mov di,0 mov bx,0 mov ax,agency mov ds,ax mov si,0 mov dh,4 mov cx,21 x1:push cx mov ax,es:di mov ds:si,ax mov ax,es:di+2 mov ds:si+2,ax mov byte ptr ds:si+4,0;显示年份mov dl,0 mov cl,2 call show_str mov ax,es:84+di push dx mov dx,es:84+di+2 call dtoc_dword;显示收入pop dx m

50、ov dl,20 mov cl,2 call show_str 34 mov ax,es:84+84+bx call dtoc_word mov dl,40;显示雇员数mov cl,2 call show_str mov ax,es:84+di push dx mov dx,es:84+di+2 div word ptr es:84+84+bx;计算人均收入并显示call dtoc_word pop dx mov dl,60 mov cl,2 call show_str add di,4 add bx,2 add dh,1 pop cx loop x1 mov ax,4c00h int 21h

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 实施方案

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁