内容发布更新时间 : 2024/11/17 13:25:09星期一 下面是文章的全部内容请认真阅读。
v1.0 可编辑可修改 MOV AX,4902H
MOV BX,403AH MUL BX
MOV [0510H],AX MOV [0512H],DX
3、? 写程序:用除法指令完成390AH÷1024H,并将商和余数顺序存放到数据段[2000H]开始的内存单元。 MOV AX, 390AH
CWD ;把字换成双字, 390AH→0000390AH, 隐含操作数AX MOV BX, 1024H DIV BX
MOV [2000H], AX MOV [2002H], DX
4、? 试编制将AX的最高4位(D15 ~D12), BX的最低4位(D3 ~D0), CX的中间8位(D11 ~D4), 拼成一个新字送DX的程序段。
AND AH, 0F0H ;取AX的高4位, AH ← AX 的 D15 ~D12 0000 AND BL, 0FH ;取 BX的后4位, BL ← 0000 BX 的 D3 ~D0 AND CX, 0FF0H ;取 CX中间8位, CX ← 0000 CX 的 D11 ~D4 0000 OR CH, AH ;拼装高8位, CH ← AX 的 D15 ~D12 , CX 的 D11 ~D8 OR CL, BL ;拼装低8位, CL ← CX 的 D7 ~D4, BX 的 D3 ~D0 MOV DX, CX ;DX← CX
5、? 将内存(10050)单元的内容7AH拆成两段,每段4位,并将它们分别存入内存(10051)和(10052)单元。即(10050)单元中的低4位放入(10051)的低4位,(10050)单元中的高4位放入(10052)的低4位,而(10051)和(10052)的高4位均为零。 MOV AX,1000H
MOV DS,AX ;DS=1000H
MOV SI,50H ;需拆字节的指针SI=50H
1313
v1.0 可编辑可修改 MOV AL,[SI] ;取一个字节到AL中 AND AL,0FH ;把AL的前4位清0
MOV [SI+1],AL ;把得到的后4位放到(10051)单元 MOV AL,[SI] ;再取出需拆字节放到AL中 MOV CL,4
SHR AL,CL ;逻辑右移四次,前4位补0 MOV [SI+2],AL ;放
6、? 在某字符串中查找是否存在′$′字符。若存在, 则将′$′字符所在地址送入BX寄存器中, 否则将BX寄存器清“0”。
CLD ;清除方向标志DF MOV DI, 0100H ;送目标串首元素偏移地址 MOV AL, ′$′ ;关键字→AL REPNE SCASB ;找关键字 AND CX, 0FFH JZ ZER DEC DI
MOV BX, DI ;关键字所在地址→BX JMP ST0
ZER:MOV BX, 0 ;未找到, 0→BX ST0: HLT
7、? 将2000H:1200H地址开始的100个字节传送到6000H:0000H开始的内存单元中去。 7MOV AX, 2000H
MOV DS, AX ;设定源串段地址 MOV AX, 6000H
MOV ES, AX ;设定目标串段地址 MOV SI, 1200H ;设定源串偏移地址 MOV DI, 0 ;设定目标串偏移地址 MOV CX, 100 ;串长度送CX
1414
v1.0 可编辑可修改 CLD ;(DF)=0, 地址指针按增量方向修改 NEXT: REP MOVSB ;每次传送一个字节, 并自动修改地址指针及
;CX内容, (CX)=0就继续传送, 直至(CX)=0 8、? 求AX累加器和BX寄存器中两个无符号数之差的绝对值,结果放在内存(2800)单元中。 CLC ; 清除CF SUB AX,BX
JC AA ; CF=1转AA去执行(即AX<BX时转移)
MOV DI,2800H ; 结果指针DI=2800H MOV [DI],AX ; 结果送到2800H和2801H单元 HLT ; 暂停 AA: SUB BX,AX ; BX←BX-AX MOV DI,2800H MOV [DI],BX HLT
9、? 设AX寄存器中有一个16位二进制数,编一程序,统计AX中‘1’的个数,统计结果送CX中。START:MOV CX,0 LOOP: SUB AX,0 JZ STP SAL AX,1 JNC NOD
INC CX
NOD: JMP LOOP STP: HLT
10、? 写程序将外设20H与30H端口的内容相乘,结果放在AX中。 START: IN AL,20H MOV BL,AL IN AL,30H
15
15v1.0 可编辑可修改 MOV CL,AL MOV AX,0 ADLOP: ADD AL,BL ADC AH,0 DEC CL
JNZ ADLOP HLT
16
16