完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
8088/8086: 最小模式下信号总线由芯片内部直接引出 最小模式下 8086 的 低八位数据线 和 低八位地址线 位分时复用 控制线: 发送地址时, 会送出 ALE(地址锁存允许信号) 信号, IO/(!M) 信号区分 端口 和 存储器,端口用于 键盘鼠标等外设等, 另外用于 内存(ROM+RAM+显存) 访问(磁盘,内存条,显卡) 高4位地址线 也为分时复用,分别表示 地址/状态 (!DEN) :Data Enable (DT/R) :Data Transfer (INTR) :Interrupt Receive (INTA) :Interrupt Access (NMI) :Non Maskable Interrupt (HOLD) :Hold DMA (HLDA) :Hlod DMA Access 最大模式下控制总线由8088和总线控制器8288共同构成 实验: 关于segment编译后站多少字节: assume cs:code, ds:data, ss:stack data segment dw 0123h, 0456h, 0789h, 0abch, 0defh, 0fedh, 0cbah, 0987h data ends stack segment dw 0, 0, 0, 0, 0, 0, 0, 0 stack ends code segment start: mov ax, stack mov ss, ax mov sp, 16 mov ax, data mov ds, ax push ds:[0] push ds:[2] pop ds:[2] pop ds:[0] mov ax, 4c00h int 21 code ends end start assume cs:code, ds:data, ss:stack data segment dw 0123h, 0456h data ends stack segment dw 0, 0 stack ends code segment start: mov ax, stack mov ss, ax mov sp, 16 mov ax, data mov ds, ax push ds:[0] push ds:[2] pop ds:[2] pop ds:[0] mov ax, 4c00h int 21 code ends end start assume cs:code, ds:data, ss:stack code segment start: mov ax, stack mov ss, ax mov sp, 16 mov ax, data mov ds, ax push ds:[0] push ds:[2] pop ds:[2] pop ds:[0] mov ax, 4c00h int 21 code ends data segment dw 0123h, 0456h data ends stack segment dw 0, 0 stack ends end start 通过这个实验,再doxbox中debug 单步,发先 前两种 代码段大小 为 N 则 实际编译大小为 min(2^n >= N) 字节 ,而下面这种固定为48个字节 编程题: 将 数据段a 与 数据段b 相加 存储在 数据c中 assume cs:code, ss:stack a segment db 1,2,3,4,5,6,7,8 a ends b segment db 1,2,3,4,5,6,7,8 b ends c segment db 0,0,0,0,0,0,0,0 c ends stack segment dw 0, 0 stack ends code segment start: mov ax, stack mov ss, ax mov sp, 16 mov ax, a mov ds, ax mov ax, c mov es, ax mov cx, 8 mov bx, 0 setNumber: push ds ;保存 数据段a 地址 mov dx, 0 mov dl, ds:[bx] mov ax, b ;切换 数据段b mov ds, ax add dl, ds:[bx] ;累加 mov es:[bx], dl ;移动到 数据段c 上 pop ds ;切换回 数据段 a inc bx loop setNumber ;setNumber: mov dx, 0 ;mov dl, ds:[bx] ;mov ax, b ;切换 数据段b ;mov ds, ax ;add dl, ds:[bx] ;累加 ;mov es:[bx], dl ;移动到 数据段c 上 ;mov ax, a ;切换回 数据段 a ;mov ds, ax ;inc bx ;loop setNumber ;不用栈的方法有点浪费 mov ax, 4c00h int 21 code ends end start 将 数据段a 中的数据 逆序存储到 数据段b 中 我的脑残思路 assume cs:code, ss:stack a segment dw 1,2,3,4,5,6,7,8,0ah,0bh,0ch,0dh,0eh,0fh,0ffh a ends b segment dw 0,0,0,0,0,0,0,0,0,0 b ends stack segment dw 0, 0, 0, 0, 0, 0, 0, 0 stack ends code segment start: mov ax, stack mov ss, ax mov sp, 16 mov ax, a mov ds, ax mov ax, b mov es, ax mov cx, 8 mov bx, 0 setpush: push ds:[bx] add bx, 2 loop setpush mov bx, 0 mov cx, 8 setpop: pop es:[bx] add bx, 2 loop setpop mov ax, 4c00h int 21 code ends end start 大佬 的思路 : assume cs:code a segment dw 1,2,3,4,5,6,7,8,0ah,0bh,0ch,0dh,0eh,0fh,0ffh a ends b segment dw 0,0,0,0,0,0,0,0,0,0 b ends code segment start: mov ax, b mov ss, ax mov sp, 16 mov ax, a mov ds, ax mov cx, 8 mov bx, 0 setNumber: push ds:[bx] add bx, 2 loop setNumber mov ax, 4c00h int 21 code ends end start |
|
|
|
只有小组成员才能发言,加入小组>>
3278 浏览 9 评论
2955 浏览 16 评论
3455 浏览 1 评论
8987 浏览 16 评论
4050 浏览 18 评论
1102浏览 3评论
570浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
568浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2301浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1857浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 01:19 , Processed in 1.020812 second(s), Total 81, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号