Exercise One:自si开始的三个字单元中,存放着无符号的数,要求将这三个数进行相加,结果存放到后一个单元中去。
要点: 注意是无符号数,再相加的过程中,只要CF产生了进位,就会发生溢出。
DATA SEGMENT BUF DW XXH,YYH,ZZH SUM DW ?,? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX LEA SI,BUF LEA DI,SUM MOV AX,[SI] ADD AX,[SI+2] MOV [DI],AX MOV AX,0 ADC AX,O MOV [DI+2],AX MOV AX,[DI] MOV AX,[SI+4] MOV [DI],AX ADC [DI+2],0 MOV AH,4CH INT 21H COD ENDS END START
Exrcise Two:试编写一个程序,把地址偏移量为100H开始的256个单元分别写入吧00H,01H,02H,。。。。,FFH。
我们选用LOOP循环。
DATA SEGMENT ORG 100H BUF1 DB 256 DUP(?) COUNT EQU $-BUF1 DATA ENDS STK SEGMENT STACK DB 100 DIP(?) STK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STK START:MOV AX,DATA MOV DS,AX MOV SI,OFFSET BUF1 MOV CX,COUNT XOR AL,AL NEXT:MOV [SI],AL INC AL INC SI LOOP NEXT MOV AH 4CH INT 21H CODE ENDS END START
Exercise Three:统计上述数据块中写入的元素中的0元素,正数,负数的个数,并分别把同i结果写u上述数据块的后面三个单元中。
DATA SEGMENT ORG 100H BUF1 DB 00h,01h,02h,,,ffh ;假设我们现在定义 COUNT EQU $-BUF1 DB 3 DUP(?) DATA ENDS STK SEGMENT STACK DB 100 DIP(?) STK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STK START:MOV AX,DATA MOV DS,AX MOV SI,OFFSET BUF1 MOV CX,COUNT XOR BX,BX ;用来存储正数和负数 XOR DH,DH ;用来存储负数 NEXT2:MOV AL,[SI] CMP AL,0 JZ ZERO JS NEGAT INC BL JMP NEXT3 ZERO:INC DH NEGAT:INC BH NEXT3:INC SI LOOP NEXT2 MOV [SI],DH INC SI MOV [SI],BX MOV AH 4CH INT 21H CODE ENDS END START
Exercise Four:把地址偏移量为STRG1开始的128个单元的内容,传送到地址偏移量为STRG2开始的单元中。
通常我们一般选用LOOP循环结构来构建程序,但是MOVSB移动字符串的指令也可以用于此。
DATA SEGMENT STRG1 DB XXH,XXH,XXH,,,,XXH SOUNT EQU $- STRG1 STRG2 DB 128 DUP(?) DDATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX MOV SI,OFFSET STRG1 LEA DI,STRG2 MOV CX,COUNT CLD REP MOVSB MOV AH,4CH INT 21H CODE ENDS END START
未完,待续........
原文:https://www.cnblogs.com/a-runner/p/12676330.html