王爽老师寒假汇编语言作业全解全析共同交流

合集下载

汇编语言(王爽)_第二版_课后题全_答案18

汇编语言(王爽)_第二版_课后题全_答案18

0C1C:0124 push [6]0C1C:0128-rAX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=0C1C ES=0C1C SS=0C1C CS=0C1C IP=0100 NV UP EI PL NZ NA PO NC 0C1C:0100 B8FFFF MOV AX,FFFF-tAX=FFFF BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=0C1C ES=0C1C SS=0C1C CS=0C1C IP=0103 NV UP EI PL NZ NA PO NC 0C1C:0103 8ED8 MOV DS,AX-tAX=FFFF BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=FFFF ES=0C1C SS=0C1C CS=0C1C IP=0105 NV UP EI PL NZ NA PO NC 0C1C:0105 B80022 MOV AX,2200-tAX=2200 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=FFFF ES=0C1C SS=0C1C CS=0C1C IP=0108 NV UP EI PL NZ NA PO NC 0C1C:0108 8ED0 MOV SS,AX-tAX=2200 BX=0000 CX=0000 DX=0000 SP=0100 BP=0000 SI=0000 DI=0000 DS=FFFF ES=0C1C SS=2200 CS=0C1C IP=010D NV UP EI PL NZ NA PO NC 0C1C:010D A10000 MOV AX,[0000] DS:0000=5BEA-d ffff:0 fFFFF:0000 EA 5B E0 00 F0 31 32 2F-32 35 2F 30 37 00 FC 59 .[...12/25/07..Y-tAX=5BEA BX=0000 CX=0000 DX=0000 SP=0100 BP=0000 SI=0000 DI=0000 DS=FFFF ES=0C1C SS=2200 CS=0C1C IP=0110 NV UP EI PL NZ NA PO NC 0C1C:0110 03060200 ADD AX,[0002] DS:0002=00E0-tAX=5CCA BX=0000 CX=0000 DX=0000 SP=0100 BP=0000 SI=0000 DI=0000 DS=FFFF ES=0C1C SS=2200 CS=0C1C IP=0114 NV UP EI PL NZ NA PE NC 0C1C:0114 8B1E0400 MOV BX,[0004] DS:0004=31F0-tAX=5CCA BX=31F0 CX=0000 DX=0000 SP=0100 BP=0000 SI=0000 DI=0000 DS=FFFF ES=0C1C SS=2200 CS=0C1C IP=0118 NV UP EI PL NZ NA PE NC。

汇编语言 第二版 王爽 完整答案解读

汇编语言 第二版 王爽 完整答案解读

第1章基础知识检测点1.1(1)1个CPU的寻址能力为8KB,那么它的地址总线的宽度为13。

(2)1KB的存储器有1024个存储单元。

存储单元的编号从0到1023。

(3)1KB的存储器可以存储1024*8个bit,1024个Byte。

(4)1GB、1MB、1KB分别是2^30、2^20、2^10 Byte。

(n^m的意思是n的m次幂)(5)8080、8088、80286、80386的地址总线宽度分别是16根、20根、24根、32根,则它们的寻址能力分别为:64(KB)、1(MB)、16(MB)、4(GB)。

(6)8080、8088、8086、80286、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=F4A3Hmov ah,31H AX=31A3Hmov al,23H AX=3123Hadd ax,ax AX=6246Hmov bx,826CH BX=826CHmov cx,ax CX=6246Hmov ax,bx AX=826CHadd ax,bx AX=04D8Hmov al,bh AX=0482Hmov ah,bl AX=6C82Hadd ah,ah AX=D882Hadd al,6 AX=D888Hadd al,al AX=D810Hmov ax,cx AX=6246H(2) 只能使用目前学过的汇编指令,最多使用4条指令,编程计算2的4次方。

解:mov ax,2add ax,axadd ax,axadd ax,ax检测点2.2(1) 给定段地址为0001H,仅通过变化偏移地址寻址,CPU的寻址范围为00010H到1000FH。

《汇编语言》王爽老师课件

《汇编语言》王爽老师课件
寻址方式应用
在汇编语言中,根据不同的寻址方式,可以实现不同的操作和控制 流程。
PART 03
汇编语言指令系统
数据传送指令
MOV指令
用于将数据从一个位置复制到另一个位置。例如,MOV AX, [BX]将把内存地址为BX的内容复制到AX寄存器中。
PUSH和POP指令
用于在堆栈上存储和检索数据。例如,PUSH AX将AX寄存器中的内容压入堆栈,POP AX则从堆栈顶部弹出数 据到AX寄存器中。
调试器的基本功能
01
调试器是一种用于检查程序运行时行为的工具,具有设置断点
、单步执行、查看内存和寄存器等基本功能。
常用调试器介绍
02
如OllyDbg、IDA Pro、GDB等,这些调试器各有特点,适用于
不同的平台和需求。
调试器使用技巧
03
如如何设置断点、如何单步执行、如何查看和修改内存等,这
些技巧对于调试程序至关重要。
汇编语言与机器语言是对应的,机器 语言是计算机能够直接执行的二进制 代码,而汇编语言是对机器语言的抽 象和符号表示。
汇编语言的特点
01
高效性
汇编语言能够直接描述计算机硬 件的操作,因此执行效率非常高 。
依赖性
02
03
繁琐性
汇编语言与特定的计算机体系结 构紧密相关,不同的计算机体系 结构需要使用不同的汇编语言。
调试技术应用
调试技术在程序调试中的应用
01
通过调试技术,可以定位程序中的错误,检查程序的
运行状态,理解程序的执行流程等。
调试技术在系统级编程中的应用
02 在系统级编程中,调试技术可以帮助程序员理解系统
的底层机制,检查内核和驱动程序的运行状态等。

教案王爽汇编语言 -回复

教案王爽汇编语言 -回复

教案王爽汇编语言-回复汇编语言是一种低级程序设计语言,它直接操作计算机的硬件资源。

相比高级语言,汇编语言更加接近于计算机的底层,能够提供更高的程序运行效率和更灵活的控制能力。

本文将以"汇编语言"为主题,逐步回答相关问题,从而帮助读者更好地理解汇编语言的特点和使用方法。

一、什么是汇编语言?汇编语言是一种由机器指令和程序结构语句组成的计算机语言,它直接用机器指令来描述计算机所执行的操作。

汇编语言由一系列的助记符(Mnemonic)组成,每个助记符表示一个特定的机器指令。

相比机器语言,汇编语言使用助记符更加易于理解和编写。

二、为什么要学习汇编语言?1. 深入理解计算机体系结构:学习汇编语言可以使我们更深入地了解计算机的工作原理和内部结构,从而提高对计算机体系结构的理解。

2. 提高程序的执行效率:汇编语言直接操作计算机的硬件资源,可以灵活地利用底层硬件功能,从而实现更高效的程序执行。

3. 调试和优化程序:汇编语言代码更接近于计算机的底层,可以更容易地调试和优化程序,提高程序的性能和稳定性。

4. 实现底层功能和接口:某些底层功能和接口可能需要用汇编语言来实现,学习汇编语言可以帮助我们更好地理解和应用这些功能和接口。

三、汇编语言的基本元素是什么?汇编语言的基本元素包括指令(Instruction)、寄存器(Register)、地址(Address)、操作数(Operand)等。

1. 指令:指令是汇编语言中最基本的元素,用于告诉计算机执行某种操作。

每条指令都对应着一条机器指令。

2. 寄存器:寄存器是计算机的一种存储设备,用于存储程序和数据。

汇编语言通常通过寄存器与计算机的其他硬件资源进行数据传输和操作。

3. 地址:地址表示计算机内存中某个位置的标识符,可以用于读取或写入数据。

4. 操作数:操作数是指令执行时所需要的数据,可以是寄存器、内存地址或常数。

四、汇编语言的编程过程是怎样的?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分别是2^30、2^20、2^10 Byte。

(n^m的意思是n的m次幂)(5)8080、8088、80286、80386的地址总线宽度分别是16根、20根、24根、32根,则它们的寻址能力分别为:64(KB)、1(MB)、16(MB)、4(GB)。

(6)8080、8088、8086、80286、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=F4A3Hmov ah,31H AX=31A3Hmov al,23H AX=3123Hadd ax,ax AX=6246Hmov bx,826CH BX=826CHmov cx,ax CX=6246Hmov ax,bx AX=826CHadd ax,bx AX=04D8Hmov al,bh AX=0482Hmov ah,bl AX=6C82Hadd ah,ah AX=D882Hadd al,6 AX=D888Hadd al,al AX=D810Hmov ax,cx AX=6246H(2) 只能使用目前学过的汇编指令,最多使用4条指令,编程计算2的4次方。

解:mov ax,2add ax,axadd ax,axadd ax,ax检测点2.2(1) 给定段地址为0001H,仅通过变化偏移地址寻址,CPU的寻址范围为00010H到1000FH。

王爽汇编语言

王爽汇编语言

王爽汇编语言
王爽汇编语言(WSL)是一种低级编程语言,它是由中国程序员王爽在20世纪70年代开发的。

它是一种非常简单易用的语言,可以用来创建专业程序,可以在很多系统平台上运行。

它的目的是可以把复杂的任务分解成更加简单的组件,使得程序更加容易调试和维护。

WSL的特点有很多,它采用了一种叫做分程序的技术,允许程序员将一个复杂的任务分解成许多小的子任务,每个子任务都可以用简单的汇编语句来完成,使得程序更加容易理解和维护。

WSL还有一个独特的特性,叫做代码优化,它能够自动识别大量代码中的重复和无用部分,并将其删除,减少程序的大小,提高程序的运行效率。

另外,WSL还允许程序员使用多个指令汇编器(MASM),这使得程序员可以根据不同的需求和设备选择不同的指令集,可以更好地支持不同类型的处理器。

此外,WSL也具有一些独特的调试特性,比如自动检测代码中的语法、错误,以及跟踪程序执行流程,使程序员可以更容易地找出程序中的错误或漏洞。

最后,WSL也具有一些支持库,可以让程序员在程序中使用一些预先定义好的函数和结构,以减少程序的编写工作量。

总的来说,WSL是一种非常实用的低级编程语言,它的目的是帮助程序员更高效、更轻松地完成编程任务。

它可以帮助程序员精简代码,减少重复工作,提高程序效率,同时也使得程序更加容易调试和
维护。

WSL有着很多优点,使它不仅适用于小型项目,而且在大型项目中也得到了广泛应用。

汇编语言实验答案 (王爽)

汇编语言实验答案 (王爽)

汇编语言答案检测点1.1(第8页)(1)13(2)1024,0,1023(3)8192,1024(4)2^30,2^20,2^10(5)64,1,16,4(6)1,1,2,2,4(7)512,256(8)二进制注意:1.第4题中的符号'^'指求幂运算(如:2^30指2的30次方)检测点2.1(第18页)----------------------(1)写出每条汇编指令执行后相关寄存器中的值。

第一空:F4A3H第二空:31A3H第三空:3123H第四空:6246H第五空:826CH第六空:6246H第七空:826CH第八空:04D8H第九空:0482H第十空:6C82H第十一空:D882H第十二空:D888H第十三空:D810H第十四空:6246H(2)只能使用目前学过的汇编指令,最多使用4条指令,编程计算2的4次方。

解答如下:mov ax,2add ax,axadd ax,axadd ax,ax检测点2.2(第23页)----------------------(1)00010H,1000FH(2)1001H,2000H第2题说明:因为段的起始地址要为16的倍数。

所以当段地址小于1001H或大于2000H时CPU都无法寻到。

检测点2.3(第33页)答:CPU修改了4次IP的值。

第1次:执行完mov ax,bx后第2次:执行完sub ax,ax后第3次:读入jmp ax后第4次:执行完jmp ax后最后IP的值为0实验1查看CPU和内存,用机器指令和汇编指令编程(第33页)-----------------------------------------------------1.预备知识:Debug的使用<此部分略>2.实验任务(第43页)(1)<此部分略>(2)<此部分略>(3)通过DEBUG中的D命令查看到主板的生产日期[以月、日、年,分隔符为'/'的格式]存储在内存ffff:0005~ffff:000C(共8个字节单元中)处。

汇编语言 第二版 王爽 完整答案

汇编语言 第二版 王爽 完整答案

第1章基础知识检测点1.1(1)1个的寻址能力为8,那么它的地址总线的宽度为13。

(2)1的存储器有1024个存储单元。

存储单元的编号从0到1023。

(3)1的存储器可以存储1024*8个,1024个。

(4)1、1、1分别是2^30、2^20、2^10。

(n^m的意思是n的m次幂)(5)8080、8088、80286、80386的地址总线宽度分别是16根、20根、24根、32根,则它们的寻址能力分别为:64()、1()、16()、4()。

(6)8080、8088、8086、80286、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) 写出每条汇编指令执行后相关寄存器中的值。

,62627 4A3H,31H 31A3H,23H 3123H6246H,826 8266246H82604D8H0482H6C82H882H,6 888H810H6246H(2) 只能使用目前学过的汇编指令,最多使用4条指令,编程计算2的4次方。

解:,2检测点2.2(1) 给定段地址为0001H,仅通过变化偏移地址寻址,的寻址范围为00010H到1000。

(2) 有一数据存放在内存 20000H 单元中,先给定段地址为,若想用偏移地址寻到此单元。

则应满足的条件是:最小为1001H,最大为2000H。

检测点2.3下面的3条指令执行后,几次修改?都是在什么时候?最后中的值是多少?解:修改4次;第一次在读取“ ”后,第二次在读取“ ”后,第三次在读取“ ”后,第四次在执行完“ ”后;最后中的值为0。

实验1 查看和内存,用机器指令和汇编指令编程1.略2.(1)略(2)略(3)查看内存中的内容。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

王爽老师寒假汇编语言作业全解全析共同交流寒假程序设计项目14年2月6日更新第13题,包括设计流程图请大家一定要自行思考解决后再参考(暂时只做到了第10个)本文为原创,参见版权信息相应文件下载:1.字模提取软件 /s/1kT5F3mf2.程序demo图片 /s/1pJlUGUB版权信息:题目版权信息: 面向河北农业大学学生的计算机科学与技术学习活动解题代码,过程分析版权信息: 参见页眉程序设计项目一data segmentdw ?data endsend要求:只在定义的数据段'?'中加入相关的内容,使得上面的程序可以在屏幕中间显示一个绿色的字符'A'。

参考代码指令和数据没有本质上的区别认真理解这句话分析:中间位置160*13+80=2160 A=41h 绿=02h直接做不出,先写个可以显示的,再找16进制填进去浅析:先不用data段,写出一个简单的程序,即写出注释符号所在的程序.运行程序,查看cs:0中的数据,然后将数据填入data段,注意高地位[html]view plaincopy1.;assume cs:data2.data segment3. dw 00b8h,8eb8h,0bbc0h,0870h,41b8h,0b900h,0002h,8926h4. dw 2607h,4f89h,0b801h,4c00h,21cdh5.; mov ax,0b800h6.; mov es,ax7.; mov bx,21608.; mov ax,41h9.; mov cx,02h10.; mov es:[bx],ax11.; mov es:[bx+1],cx12.;mov ax,4c00h13.;int 21h14.data ends15.end程序设计项目二对加密的字符串进行解密。

要求:(1)加密的字符串放在Cryptography段。

(2)解密方法:将Cryptography段的每个字符的ASCII值减去1。

(3)用汇编语言实现程序,将Cryptography段的数据按照解密方法进行解密,将解密后的数据放在PlainText段,然后再把解密之后的字符串以白底蓝字方式显示到屏幕中间。

(4)密文和明文的数据段定义如下:Cryptography segmentdb 'tqsfbe!zpvs!xjoht'db '!!cf!zpvs!nbtufs!'Cryptography endsPlainText segmentdb 2*17 dup (' ')PlainText ends参考代码[plain]view plaincopy1.assume cs:code,ds:Cryptography ;ds数据段,名字可以随便,但是段名必须是已有的2.3.4.Cryptography segment5. db 'tqsfbe!zpvs!xjoht'6. db '!!cf!zpvs!nbtufs!'7.Cryptography ends8.9.10.PlainText segment11. db 2*17 dup (' ') ;+3*16=4812.PlainText ends13.14.15.code segment16.start: mov ax,Cryptography ;最后一次错在了这,必须加上这两句,要不然ds无数据17. mov ds,ax18. ;解密19. mov ax,0b800h20. mov es,ax21. mov ah,71h22. mov si,2126 ;中间是160*13+80-34=2126 左偏移34位开始23. mov bx,024. mov cx,3425. s:26. mov al,ds:[bx]27. dec al ;-1上次错在使用了ax28. mov ds:[bx+48],al ;存入PlainText29. mov es:[si],ax ;结合ah al 显示30. add si,231. inc bx32. loop s33.34.35.mov ax,4c00h36.int 21h<span style="color:#000099;">37.38.39.code ends40.end start</span>程序设计项目三加、减、除三则运算。

要求:(1)读取字符串的内容,判断第四个字符是'+'、'-'或'/',然后按照相应的符号进行运算,并把运算结果转换为字符串存放在等号后面,最后把算式显示到屏幕中间,白底蓝字。

(2)注意数字字符的ASCII与数字的对应关系,数字的数值加30H为这个数字的字符所对应的ASCII。

(3)数据段定义如下:Calculate segmentdb '1. 3/1= 'db '2. 5+3= 'db '3. 9-3= 'db '4. 4+5= 'Calculate ends参考代码[plain]view plaincopy1.;;;;可能用到的知识: 1.and or p1382.;;;;知识 + - * / add sub mul div3.;;;;asc 2b 2d 2a 2f 101011 101101 101010 1011114.;;;;asc-30 d f c 11 数字asc - 30就是真实数字5.;div:除数为8位时,被除数为16位,默认放在ax寄存器中.商则放在al中,余数放在ah中6.7.assume cs:code,ds:Calculate8.9.Calculate segment10. db '1. 3/1= ' ;运算符号是第5个字符11. db '2. 5+3= ' ;一个算式占用一行12. db '3. 9-3= '13. db '4. 4+5= '14.Calculate ends15.16.code segment17.start: mov ax,Calculate18. mov ds,ax19.20. ;1.读取程式数据 2.将结果写入ds21. mov bx,0 ;字符开始22. mov cx,4 ;4行,只读取程式23. s: push cx24. mov ah,0 ;高位025. mov al,ds:[bx+3] ;低位26. sub al,30h27. mov dl,ds:[bx+4] ;运算符号28. mov dh,ds:[bx+5]29. sub dh,30h30. call far ptr check ;跳转到判定check31. add al,30h32. mov ds:[bx+8],al ;写入结果33. add bx,16 ;下一行34. pop cx35. loop s36.37. ;输出38. mov ax,0b800h39. mov es,ax40. mov si,1826 ;输出位置160*11+80-2*7=182641. mov bx,042. mov ah,71h ;蓝底白字43. mov cx,444. s0: push cx45. mov cx,1646. s1: mov al,ds:[bx]47. mov es:[si],ax ;为什么ax可以,下面注释的2行就光剩q了48. ;mov es:[si],ah49. ;mov es:[si+1],al50. inc bx51. add si,252. loop s153. pop cx54. add si,128 ;下一行 160-16*2=12855. loop s056.57. mov ax,4c00h58. int 21h59.60.;判定运算符号dl (2b 2d 2a 2f)61.check: ;用相减是否=0判定并跳转到运算子程序62. mov ch,063. mov cl,dl64. sub cx,'+' ;+65. jcxz do_add ;其实不用捣鼓+-*/的16进制,直接使用'+'就行了66. mov cl,dl67. sub cx,'-' ;-68. jcxz do_sub69. ;mov cl,dl70. ;sub cx,'*' ;*<span style="white-space:pre"> </span>乘在题目中没有要求,大家可以试做71. ;jcxz do_mul72. mov cl,dl73. sub cx,'/' ;/ ax是被除数 dh是除数商则放在al中,余数放在ah中74. jcxz do_div75.76.;运算子程序 ;5+3=8 al + dh = al77.do_add:78. add al,dh79. retf80.do_sub:81. sub al,dh82. retf83.do_div:84. div dh85. retf86.87.code ends88.end start程序设计项目四编程计算x(x>2)的y(y>2)次方。

使用add指令实现。

另,若学到第10章,使用两种方式实现:(1)只使用add指令实现;(2)只使用mul指令实现;并将计算式显示在屏幕中央。

例如:计算4的3次方。

在屏幕中央显示格式如下:4^3-----64注意:结果不能超过16位寄存器可存储的最大值。

参考代码暂时没做出来呢,比较懒,可以先看下面的程序设计项目五定义一个数据段如下:data segmentdb 'h12E332l@L#O*&^!88nI@cE$%%$T1O m33E44E55t y77O88u!()' db '?'data ends注意:第一行字符串为待处理的数据,'?'为字符串结束符号。

设计程序完成如下操作:(1)去掉除字母、空格、'!'之外的字符;(2)通过内存间的数据交换,将数据段中的字符串修改为'Hello!Nice tomeet you!';(3)在屏幕正中打印处理好后的数据。

完成程序后思考:(1)如何设计程序,程序代码量最少;(2)如何设计程序,程序执行速度最快;(3)如何设计程序,使得程序具有通用性。

注意:(1)'?'、'!'和空格分别假定为字符串的结束符、一句话的最后的标点和单词间的间隔符,都不属于干扰符号。

相关文档
最新文档