存档

‘ASM’ 分类的存档

王爽汇编语言(第2版)检测点6.1

2009年10月11日 小 恒 没有评论

(1) 下面的程序实现依次用内存0:0~0:15单元中的内容改写程序中的数据,完成程序:

  1.  assume cs:codesg
  2.  
  3.  codesg segment
  4.  
  5.  dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
  6.  
  7.  start: mov ax,0
  8.  mov ds,ax
  9.  mov bx,0
  10.  
  11.  mov cx,8
  12.  s: mov ax,[bx]
  13.  mov cs:[bx],ax
  14.  add bx,2
  15.  loop s
  16.  
  17.  mov ax,4c00h
  18.  int 21h
  19.  codesg ends
  20.  
  21.  end start

(2) 下面的程序实现依次用内存0:0~0:15单元中的内容改写程序中的数据,数据的传送用栈来进行,栈空间设置在程序内。完成程序:

  1.  assume cs:codesg
  2.  
  3.  codesg segment
  4.  
  5.  dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
  6.  dw 0,0,0,0,0,0,0,0,0,0
  7.  
  8.  start: mov ax,cs
  9.  mov ss,ax
  10.  mov sp,24h
  11.  
  12.  mov ax,0
  13.  mov ds,ax
  14.  mov bx,0
  15.  mov cx,8
  16.  s: push [bx]
  17.  pop cs:[bx]
  18.  add bx,2
  19.  loop s
  20.  
  21.  mov ax,4c00h
  22.  int 21h
  23.  codesg ends
  24.  
  25.  end start
分类: ASM, 原创 标签:

王爽汇编语言(第2版)实验4

2009年10月8日 小 恒 没有评论

(1) 编程,向内存0:200~0:23F依次传送数据0~63(3FH)。
(2) 编程,向内存0:200~0:23F依次传送数据0~63(3FH),程序中只能使用9条指令,9条指令中包括“mov ax,4cooh”和“int 21h”。

  1.  assume cs:code
  2.  
  3.  code segment
  4.  
  5.  mov ax,0020H
  6.  mov ds,ax
  7.  mov bx,0
  8.  
  9.  mov cx,64
  10.  
  11.  s:mov ds:[bx],bl ; bl存储低8位1字节数据
  12.  inc bx
  13.  loop s
  14.  
  15.  mov ax,4C00H
  16.  int 21H
  17.  
  18.  code ends
  19.  
  20.  end

(3) 下面的程序功能是将“mov ax,4c00h”之前的指令复制到内存0:200处,补全程序。上机调试,跟踪运行结果。

  1.  assume cs:code
  2.  
  3.  code segment
  4.  
  5.  mov ax,<span style="text-decoration: underline;">cs</span> ; CS存储的是代码段地址
  6.  mov ds,ax
  7.  mov ax,0020H
  8.  mov es,ax ; 目标段地址存储在ES寄存器中
  9.  mov bx,0
  10.  mov cx,<span style="text-decoration: underline;">cx</span> ; CX存放的是程序的长度
  11.  s:mov al,[bx]
  12.  mov es:[bx],al
  13.  inc bx
  14.  loop s
  15.  
  16.  mov ax,4C00H
  17.  int 21H
  18.  
  19.  code ends
  20.  
  21.  end

asmt43
(1) 复制的是什么?从哪里到哪里?
答:复制的是代码的二进制数据,从CS:0到ES:0。
(2) 复制的是什么?有多少个字节?你如何知道要复制的字节的数量?
答:复制的是代码的二进制数据,有cx个字节,因为CX存放的是程序的长度。

分类: ASM, 原创 标签:

王爽汇编语言(第2版)实验3

2009年10月7日 小 恒 没有评论

(1) 将下面的程序保存为t1.asm文件,将其生成可执行文件t1.exe。

  1.  assume cs:codesg
  2.  
  3.  codesg segment
  4.  mov ax,2000H
  5.  mov ss,ax
  6.  mov sp,0
  7.  add sp,10
  8.  pop ax
  9.  pop bx
  10.  push ax
  11.  push bx
  12.  pop ax
  13.  pop bx
  14.  mov ax,4c00H
  15.  int 21H
  16.  
  17.  codesg ends
  18.  
  19.  end

 

(2) 用Debug跟踪t1.exe的执行过程,写出每一步执行后,相关寄存器中的内容和栈顶的内容。

(3) PSPR头两个字节是CD 20,用Debug加载t1.exe,查看PSP的内容。

输入命令:
debug t1.exe
d ds:0 ff

分类: ASM, 原创 标签:

王爽汇编语言(第2版)实验2

2009年10月6日 小 恒 没有评论

(1) 使用Debug,将下面的程序段写入内存,逐条执行,根据指令执行后的实际运行情况填空。

mov ax,ffff
mov ds,ax

mov ax,2200
mov ss,ax

mov sp,0100

mov ax,[0]    ;ax=5BEA
add ax,[2]      ;ax=5CCA
mov bx,[4]    ;bx=30F0
add bx,[6]      ;bx=6021

push ax    ;sp=00FE; 修改的内存单元地址是220FE内容为5CCA
push 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:0~2000:f中的内容会发生改变?

可能要再做些实验才能发现其中的规律。如果你在这里就正确回答了这个问题,那么要恭喜你,因为你有很好的悟性。大多数的学习者对这个问题还是比较迷惑的,不过不要紧,因为随着课程的进行,这个问题的答案将逐渐变得显而易见。

图3.19 用Debug进行的实验

图3.19 用Debug进行的实验

分类: ASM, 原创 标签:

王爽汇编语言(第2版)检测点3.2

2009年8月23日 小 恒 没有评论

(1) 补全下面的程序,使其可以将10000H~1000FH中的8个字,逆序复制到20000H~2000FH中。逆序复制的含义如图3.17所示(图中内存里的数据均为假设)。

图3.17 逆序复制示意图

图3.17 逆序复制示意图

mov ax, 1000H
mov ds, ax
mov ax, 2000H  
mov ss, ax  
mov sp, 0010H  

push [0]
push [2]
push [4]
push [6]
push [8]
push [A]
push [C]
push [E]

(2) 补全下面的程序,使其可以将 10000H~1000FH 中的8个字,逆序复制到20000H~2000FH中。
mov ax, 2000H
mov ds, ax
mov ax, 1000H  
mov ss, ax  
mov sp, 0000H  
pop [E]
pop [C]
pop [A]
pop [8]
pop [6]
pop [4]
pop [2]
pop [0]

分类: ASM, 原创 标签:

王爽汇编语言(第2版)检测点3.1

2009年8月7日 小 恒 1 条评论

(1) 在Debug中,用户”d 0:0 1F” 查看内存,结果如下。

0000:0000    70 80 F0 30 EF 60 30 E2-00 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,写出每条汇编指令执行后相关寄存器中的值。
阅读全文…

分类: ASM, 原创 标签:

王爽汇编语言(第2版)实验1

2009年8月2日 小 恒 没有评论

2.实验任务
(1)使用Debug,将下面的程序段写入内存,逐条执行,观察每条指令执行后,CPU中相关寄存器中内容的变化。

注意在进入debug模式时 AX 和 BX 的初始数据为 0000H

机器码 汇编指令
b8 20 4e    mov ax,4E20H    使用T命令读入指令后 IP = IP + 3  执行指令后 AX=4E20H
05 16 14    add ax,1416H    使用T命令读入指令后 IP = IP + 3   执行指令后 AX=6236H
bb 00 20   mov ax,2000H    使用T命令读入指令后 IP = IP + 3  执行指令后 AX =2000H
01 d8     add ax,bx    使用T命令读入指令后 IP = IP + 2  执行指令后 AX=2000H,BX=0000H
89 c3     mov bx,ax    使用T命令读入指令后 IP = IP + 2 执行指令后 AX=2000H,BX=2000H
01 d8     add ax,bx    使用T命令读入指令后 IP = IP + 2 执行指令后   AX=4000H,BX=2000H
b8 1a 00     mov ax,001AH    使用T命令读入指令后 IP = IP + 2 执行指令后  AX=001AH,BX=2000H
bb 26 00     mov bx,0026H   使用T命令读入指令后 IP = IP + 3 执行指令后 AX=001AH,BX=0026H
00 d8      add al,bl   使用T命令读入指令后 IP = IP + 2 执行指令后 AX=0040H,BX=0026H
00 dc      add ah,bl    使用T命令读入指令后 IP = IP + 2 执行指令后 AX=2640H,BX=0026H
00 c7     add bh,al    使用T命令读入指令后 IP = IP + 2 执行指令后 AX=2640H,BX=4026H
b4 00     mov ah,0  使用T命令读入指令后 IP = IP + 2 执行指令后 AX=0040H,BX=4026H
00 d8     add al,bl    使用T命令读入指令后 IP = IP + 2 执行指令后 AX=0066H,BX=4026H
04 9c     add al,9CH    使用T命令读入指令后 IP = IP + 2 执行指令后 AX=0002H,BX=4026H
注意,以上结果是102H,担al是8位寄存器,高位1不能存放在al中
提示,可用E命令和A命令以两种方式将将指令写入内存。注意用T命令执行时,CS:IP的指向。

阅读全文…

分类: ASM, 原创 标签:

王爽汇编语言(第2版)检测点2.3

2009年7月31日 小 恒 没有评论

下面的3条指令执行后,CPU几次修改IP??都是在什么时候?最后IP中的值是多少?
mov ax, bx
sub ax, ax
jmp ax

指令序列:
mov ax, bx 读取这个指令进入指令缓冲器后第一次修改IP,IP = IP + 2; 执行后 ax = bx;
sub ax, ax 读取这个指令进入指令缓冲器后第二次修改IP,IP = IP + 2; 执行后 ax = 0000H;
jmp ax 读取这个指令进入指令缓冲器后第三次修改IP, IP = IP + 2; 指令执行后第四次修改IP,IP = 0000H;
阅读全文…

分类: ASM, 原创 标签: