汇编语言

汇编语言(王爽 第三版)检测点和实验

左心房为你撑大大i 提交于 2019-11-28 22:57:37
第一章 检测点1.1 13   (8kb = 8 * 1024 = 2^13) 1024 0 1023 8*1024 1024   (1 byte = 8 bit,计算机以byte为存储单位) 1024^3 1024^2 1024 2^6 1 2^4 2^2   (kb = 2^10 Mb = 2^20 Gb = 2^30) 1 1 2 2 4 512 256   (8086的寄存器为16位寄存器,一次可以读取两个字节,80386为32位寄存器) 二进制 第二章 检测点2.1 1) AX = F4A3h AX = 31A3h AX = 3123h AX = 6246h BX = 826Ch CX = 6246h AX = 826Ch AX = 04D8h AX = 0482h AX = 6C82h AX = D882h AX = D888h AX = D810h AX = 6246h mov ax,2 add ax,ax add ax,ax add ax,ax 检测点2.2 1)00010h 1000fh (0001h+0000h 0001h+ffffh) 2)1001h 2000h (偏移地址的范围为0000-ffff,内存单元=段地址*16+偏移地址,当偏移地址最小时,段地址最大,偏移地址最大时,段地址最小) 检测点2.3 4次修改IP,最后IP为0 第三章 检测点3.1 1)

汇编语言 实验12

随声附和 提交于 2019-11-28 22:51:36
1 assume cs:code 2 3 code segment 4 start: 5 mov ax,code 6 mov ds,ax 7 mov si,offset do0 8 mov ax,0 9 mov es,ax 10 mov di,200h 11 mov cx,offset do0end-offset do0 12 cld 13 rep movsb 14 15 mov ax,0 16 mov ds,ax 17 mov word ptr ds:[0],200h 18 mov word ptr ds:[2],0 19 20 mov ax,4c00h 21 int 21h 22 23 do0: 24 jmp short do0start 25 do0str: 26 dw 1 27 db 'divide error! ' 28 do0start: 29 mov ax,cs 30 mov ds,ax 31 mov si,202h 32 33 mov ax,0b800h 34 mov es,ax 35 mov di,7c8h 36 mov cx,14 37 ; mov cx,ds:[202h] 38 s: 39 mov al,ds:[si+2] 40 mov es:[di],al 41 inc si 42 add di,2 43 loop s 44 45 mov ax,4c00h

汇编语言 实验一

柔情痞子 提交于 2019-11-28 22:51:24
一、使用Debug,将下面的程序写入内存,逐条执行,观察每条指令执行后CPU中相关寄存器中内容的变化。 机器码 汇编指令 b8 20 4e mov ax, 4E20H 05 16 14 add ax, 1416H bb 00 20 mov bx, 2000H 01 d8 add ax, bx 89 c3 mov bx, ax 01 d8 add ax, bx b8 1a 00 mov ax, 001AH bb 26 00 mov bx, 0026H 00 d8 add a1, b1 00 dc add ah, b1 00 c7 add bh, a1 b4 00 mov ah, 0 00 d8 add a1, b1 04 9c add a1, 9CH a; e: 二: 将下面3条指令从2000:0开始的内存单元中,利用这3条指令计算2的8次方。 mov ax, 1 add ax, ax jmp 2000:0003 三、查看内存中的内容。 PC机主板上的ROM中写有一个生产日期,在内存FFF000H~FFFFFH的某几个单元中,请找到这个生产日期并试图改变它。 尝试修改后 仍然没有变动 四、向内存从B8100H开始的单元中填写数据,如: -e B810:0000 01 01 02 02 03 03 04 04 来源: https://www.cnblogs.com

汇编语言 实验14

早过忘川 提交于 2019-11-28 22:51:04
1 assume cs:code 2 3 data segment 4 db 9,8,7,4,2,0 5 db 0,3,6,9,12,15 6 data ends 7 8 stack segment 9 dw 16 dup (0) 10 stack ends 11 12 code segment 13 begin: 14 mov ax,stack 15 mov ss,ax 16 mov sp,20h 17 18 mov ax,0b800h 19 mov es,ax 20 mov di,0 21 22 mov ax,data 23 mov ds,ax 24 again: 25 mov si,0 26 mov di,160*10+60 27 call clear_screen 28 mov byte ptr es:[di+4],'/' 29 mov byte ptr es:[di+5],2 30 mov byte ptr es:[di+10],'/' 31 mov byte ptr es:[di+11],2 32 mov byte ptr es:[di+22],':' 33 mov byte ptr es:[di+23],2 34 mov byte ptr es:[di+28],':' 35 mov byte ptr es:[di+29],2 36 37 mov cx,6 38 s0:

汇编语言 实验1

孤街浪徒 提交于 2019-11-28 22:50:53
实验1 一、熟悉debug功能 : -r 查看/修改寄存器内容 用法1: -r 查看当前各寄存器中内容 用法2: -r 段地址:偏移地址 修改【段地址:偏移地址】表示的内存中的内容 示例: -d :查看内存中的内容(右侧显示以内存中的内容作为ASCLL码的符号,如果没有对应符号则显示“.“) 用法1: -d 查看从当前CS:IP地址开始的默认128字节内容 用法2: -d 段地址:偏移地址 查看从【段地址:偏移地址】表示的内存开始的默认128字节内容 用法3: -d 段地址:偏移地址1 偏移地址2(或l+数字) 查看从【段地址:偏移地址1】表示的内存开始到偏移地址2的内容(或者显示指定长度的内容) 示例: -e :改写内存中内容(后面一定要加地址,否则报错) 用法1: -e 【段地址:偏移地址】 要改写的内容(用空格间隔) 从【段地址:偏移地址】开始改写内存中的内容,最多能一次性输入32个左右 用法2: -e ‘字符’ ‘字符’ ……(或者“字符“) 从【段地址:偏移地址】开始改写内存中的内容,以ASCLL码的方式存入内存单元 用法3: -e 【段地址:偏移地址】 可以逐个修改从【段地址:偏移地址】开始内存中的内容,形式为“原值.修改值“,(原值会自动给出)按空格进入下一个值得修改。若原值不需要修改,则按空格跳过。 示例: 单步跟踪指令 -t :执行一条指令。遇到loop

实验1 Windows汇编语言开发环境

时光毁灭记忆、已成空白 提交于 2019-11-28 22:50:31
Windows 、 Linux 等现代操作系统都运行于 CPU 的保护模式下。学习保护模式的汇编语言编程,要选用合适的编译、调试工具,编译工具决定了汇编程序的语法、结构,而调试工具则能够帮助我们迅速查找程序中的错误,提高调试效率。 本实验指导书采用 Microsoft 公司的 MASM 6.14 作为编译工具, Microsoft Visual C/C++ 作为开发调试环境。 1.1 汇编程序结构 和其他语言一样,汇编语言的源程序也要符合一定的格式,才能被编译程序所识别和处理。学习和掌握这些格式,是进行汇编编程的第一步。 1.1.1 一个显示字符串的汇编程序 下面是一个简单的汇编程序。 ;程序清单:test.asm(在控制台上显示一个字符串) .386 .model flat, stdcall option casemap:none ; 说明程序中用到的库、函数原型和常量 includelib msvcrt.lib printf PROTO C :ptr sbyte, :vararg ; 数据区 .data szMsg byte “ Hello World! ” , 0ah, 0 ; 代码区 .code start: mov eax, OFFSET szMsg invoke printf, eax ret end start 1.1.2 程序格式 在源程序 test.asm 中

汇编语言学习:实验七

三世轮回 提交于 2019-11-28 20:12:05
源文件+exe程序: https://download.csdn.net/download/qq_29962483/11633245 Power idea公司从1975年成立一直1995年的基础情况如下: 年份 收入(千美元) 雇员(人) 人均收入(千美元) 1975 16 3 ? 1976 22 7 ? 1977 382 9 ? 1978 1356 13 ? 1979 2390 28 ? 1980 8000 38 ? : : : 1995 5937000 17800 ? 下面的程序中,已经定义好了这些数据: data segment db '1975','1976','1977','1978','1979','1980','1980','1981','1982','1983' db '1984','1985','1986','1987','1988','1989','1990','1981','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

汇编语言学习:实验四

╄→гoц情女王★ 提交于 2019-11-28 19:48:19
源文件+exe程序: https://download.csdn.net/download/qq_29962483/11632008 编程,向内存0:200~0:23F依次传送数据0~63(3FH) 编程,向内存0:200~0:23F依次传送数据0~64(3FH),程序中只能使用9条指令,9条指令中包括“mov ax,4c00h”和“int 21h” 下面的程序的功能是将“mov ax,4c00h”之前的指令复制到内存0:200处,补全程序。上机调试,跟踪运行结果。 assume cs:code code segment mov ax,___ mov ds,ax mov ax,0020h mov es,ax mov bx,0 mov cx,___ s: mov al,[bx] mov es:[bx],al inc bx loop s mov ax,4c00h int 21h code ends end 提示: 复制的是什么?从哪里到哪里? 复制的是什么?有多少个字节?读者如何知道要复制的字节的数量? 注意: 一定要做完这个实验才能进行下面的课程 答案:cs 28 来源: https://blog.csdn.net/qq_29962483/article/details/100119864

汇编语言学习:实验二

我怕爱的太早我们不能终老 提交于 2019-11-28 19:45:48
1.预备知识:Debug的使用 前面实验中,讲了Debug一些主要命令的用法,这里,我们在补充一些关于Debug的知识 关于D命令 上次试验中,我们知道,D命令式查看内存单元的命令,可以用: d 段地址:偏移地址的格式查看指定内存单元的内容,上次实验中,D命令后面的段地址和偏移地址都是直接给出的 现在,我们知道段地址是放在段寄存器中的,在D命令后面直接给出段地址,是Debug提供的一种直观的操作方式。 D命令是由Debug执行的,Debug在执行“d 1000:0”这样的命令时,也会先将段地址1000送入段寄存器中 Debug是靠什么来执行D命令的?当然是一段程序 谁来执行这段程序?当然是CPU CPU在访问内存单元的时候从哪里得到内存单元的段地址?从段寄存器中得到。 所以,Debug在其处理D命令的程序段中,必须有将段地址送入段寄存器的代码 段寄存器有4个:CS、DS、SS、ES,将段地址送入哪个段寄存器呢? 首先不能是CS,因为CS:IP必须指向Debug处理D命令的代码,也不能是SS,因为SS:SP要指向栈顶。 这样就只剩下DS和ES可以选择,放在哪里呢?我们知道,访问内存的指令如“mov ax,[0]”等一般都默认段地址在ds中,所以Debug在执行如:“d 段地址:偏移地址”这种D命令时,将段地址送入ds中比较方便 D命令也提供了一种符合CPU机理的格式:“d 段寄存器

浅谈指令系统---(汇编语言)

眉间皱痕 提交于 2019-11-28 17:08:10
一:指令正确格式        数据传输指令:         Mov(符合上述图形):         1.立即数不能在左边         2.两边不能同为段寄存器(DS,CS,ES,SS)         3.两边一样长      (特殊: 1.不能修改CS          2.INC WORD PTR[BX + SI] 执行结果是有效值 + 1          3.[]间接寻址中若有2个,必须一个为基址,一个为变址即:mov DH [SI + BP],而且没有mov BX BX + 1这种格式,          )     XHCG(交换):不出现段寄存器(DS,CS,ES,SS)     PUSH, POP:以16字为单位且每次操作SP+= 2     XLAT:只有AL,DS,BX3个     LEA,LDS,LES:为 16位通用寄存器 +[内存操作数] 即 LEA DS [SI]是错误的(因为DS为段寄存器)     IN,OUT:只有AL或AX, 但是16位需先给DX     寻址方式: 立即、直接、寄存器、寄存器间接 (基址[BP,BX],变址[SI,DI]、位移[数字])      (寄存器间接寻址中,BP由SS控制位置,BX、SI、DI由DS控制位置,下面会讲到) 即( 物理地址PA = DS *16 + 有效地址EA 还是 = SS *16