Java教程

实验2

本文主要是介绍实验2,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

任务1

1-1

  1.

assume ds:data, cs:code, ss:stack
data segment
  db 16 dup(0)
data ends
stack segment
  db 16 dup(0)
stack ends
code segment
start:
  mov ax, data
  mov ds, ax
  mov ax, stack
  mov ss, ax
  mov sp, 16
  mov ah, 4ch
  int 21h
code ends
end start

 

 

 1).在debug中将执行到line17结束、line19之前时,

    Ds=076C

    SS=076D

    CS=076E

2).

  data段的地址是X-2 

  stack的段地址是X-1

 

1.2

  1.

assume ds:data, cs:code, ss:stack
data segment
  db 4 dup(0)
data ends
stack segment
  db 8 dup(0)
stack ends
code segment
start:
  mov ax, data
  mov ds, ax
  mov ax, stack
  mov ss, ax
  mov sp, 8
  mov ah, 4ch
  int 21h
code ends
end start

 

 

 

 1).在debug中将执行到line17结束、line19之前时,

    Ds=076C

    SS=076D

    CS=076E

2).

  data段的地址是X-2 

  stack的段地址是X-1

 

实验1.3

 

assume ds:data, cs:code, ss:stack
data segment
  db 20 dup(0)
data ends
stack segment
  db 20 dup(0)
stack ends
code segment
start:
  mov ax, data
  mov ds, ax
  mov ax, stack
  mov ss, ax
  mov sp, 20
  mov ah, 4ch
  int 21h
code ends
end start

 1).在debug中将执行到line17结束、line19之前时,

    Ds=076C

    SS=076E

    CS=0770

2).

  data段的地址是X-4 

  stack的段地址是X-2

 

 

1.4

assume ds:data, cs:code, ss:stack
code segment
start:
  mov ax, data
  mov ds, ax
  mov ax, stack
  mov ss, ax
  mov sp, 20
  mov ah, 4ch
  int 21h
code ends
data segment
  db 20 dup(0)
data ends
stack segment
  db 20 dup(0)
stack ends
end start

 1).在debug中将执行到line9结束、line11之前时,

    Ds=076E

    SS=07700

    CS=076C

2).

  data段的地址是X+2

  stack的段地址是X+4

1.5

1.

  16

2.

  \

  

  

  

 只有task1_4.asm可以正确执行。

  因为只有task1_4.asm在内存中可执行代码在最前面,不指名入口,cpu会把定义的数据也当成指定代码执行了。

 

 

任务2

assume cs:code
code segment
  mov ax, 0b800h   ;目标空间的段地址
  mov ds, ax

  mov ax, 0403H

  mov bx, 0f00h
  mov cx, 80  ;循环80次


s:  mov ds:[bx], ax  ;将ax的数据送入b800:bx
  add bx, 2  ;一次性写入两个所以bx+2,也可以写两个inc bx
  loop s

  mov ax, 4c00h
  int 21h
code ends
end

 

 

虽然效果一样但是用b指令的时候却发现结果不同

 

 

任务3

assume cs:code
data1 segment
db 50, 48, 50, 50, 0, 48, 49, 0, 48, 49 ; ten numbers
data1 ends
data2 segment
db 0, 0, 0, 0, 47, 0, 0, 47, 0, 0 ; ten numbers
data2 ends
data3 segment
db 16 dup(0)
data3 ends
code segment
start:
  mov ax,data1
  mov ds,ax
  mov ax,data2
  mov es,ax
  mov bx,0
  mov cx,10

s1:   mov al,es:[bx]
  add ds:[bx],al
  inc bx
  loop s1

  mov ax ,data3
  mov es,ax

  mov bx,0
  mov cx,10

s2:   mov al,ds:[bx]
  mov es:[bx],al
  inc bx
  loop s2

mov ah, 4ch
int 21h
code ends
end start

 

data1对应的内存空间数据原始值为076C:0000

data2对应的内存空间数据原始值为076C:0010

data3对应的内存空间数据原始值为076C:0020

相加前

 

相加后

 

 

 

 

 

任务4

 

 

 

 

 

 

执行前

data1对应的内存空间数据原始值为076C:0000

data1对应的内存空间数据原始值为076C:0010

 

执行后

 

 确实反转了

 

 

任务5

assume cs:code, ds:data
data segment
db 'Nuist'
db 2, 3, 4, 5, 6
data ends
code segment
start:
mov ax, data
mov ds, ax
mov ax, 0b800H
mov es, ax
mov cx, 5
mov si, 0
mov di, 0f00h
s: mov al, [si]
and al, 0dfh
mov es:[di], al
mov al, [5+si]
mov es:[di+1], al
inc si
add di, 2
loop s
mov ah, 4ch
int 21h
code ends
end start

 

 

 

 

 

 

line 19 的作用是对字母进行大写化

将【si】与11101111B进行逻辑与运算从而得到大写字母

 

改成db 5 dup(2)时结果为

 

 改成db 5 dup(5)时结果为

 

 

 

 此处数值对应各个字母的颜色,改成db X dup(X)时就变成了单一颜色。

 

 

 

任务6

 

 

 

 

 

 

 

 

 

任务7

 

 

 

 

 

 

明天写明天写 猪脑过载了

 

这篇关于实验2的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!