实验四---------欢迎大家共同讨论
4.1-4.2assume cs:code
code segment
start: mov ax, 20H ;(ax) = 20H
mov ds, ax ;设置段地址 (ds) = (ax)
mov bx, 0 ;(bx) = 0 清空bx寄存器里面的值,用于存储偏移地址及变量 配合段地址ds
mov cx, 64 ;(cx) = 64 用于存储循环变量 64次 配合loop使用
s: mov ds:, bl ;开始循环,用Bl低8位存放数据在ds:内存单元中 ((ds)*16+(bx)) = (bl)
inc bx ;(bx) = (bx)
loop s ;跳转指令
mov ax, 4c00H
int 21H
code ends
end start
4.3
assume cs:code
code segment
start: mov ax,0BA6H ;3字节 这个地址每台计算机都不一样
mov ds,ax ;2字节
mov ax,0020h ;3字节
mov es,ax ;2字节
mov bx,0 ;3字节
mov cx,24 ;3字节
s: mov al, ;2+1 字节
mov es:,al ;2字节
inc bx ;1字节
loop s ;2字节
mov ax,4c00H
int 21H
code ends
end start
复制的是 mov ax,0BA6H 至 loop s 的代码段,0BA6:0H ~ 0BA6:18H 地址
赋值的是二进制数据(这里也不太肯定),有24个字节,先把程序写好编译好,debug 程序,利用 -u 0BA6H:0查看汇编代码有多少个字节,然后自己算一下 有一个疑问 0:200~0:23F是怎么变成20:0~20:3F0:200 这不是0段吗 20:0 不是20段吗怎么转换的 gang19840815 发表于 2020-2-12 22:05
有一个疑问 0:200~0:23F是怎么变成20:0~20:3F0:200 这不是0段吗 20:0 不是20段吗怎么转换的
物理地址=段地址*16(相当于左移一位/后面加个0)+偏移地址
0:200=0*16+200=200
20:0=20(16进制)*16+0=200
所以这两个是一样的
页:
[1]