Lệnh này còn được gọi là lệnh lưu chuỗi. Cú pháp lệnh:
Dạng 1: STOSB
Lệnh trên chuyển nội dung của thanh ghi AL (1 byte) tới ô nhớ có địa chỉ ES:DI. Dạng 2: STOSW
Lệnh trên chuyển nội dung của thanh ghi AX (2 byte) tới ô nhớ có địa chỉ ES:DI. Ví dụ 1:
Xét chuỗi sau đây: .DATA
ChuoiKT DB 6 DUP (?)
Hãy nhập một kí tự từ bàn phím rồi đặt kí tựđó vào phần tửđầu tiên của chuỗi. Giải:
Ta sẽ sử dụng chức năng số 1 của ngắt 21h để nhập kí tự, thanh ghi AL sẽ chứa mã ASCII của kí tự đó. Muốn chuyển kí tự từ AL vào phần tửđầu tiên của chuỗi bằng lệnh STOSB thì ES:DI phải chứa địa chỉ đầu của ChuoiKT, điều đó được thực hiện nhờ lệnh sau:
LEA DI, ChuoiKT ;DI chứa offset của ChuoiKT Chương trình đầy đủ: TITLE Vi du Chuoi .MODEL SMALL .STACK 100H .DATA ChuoiKT DB 6 DUP (?) .CODE MAIN PROC
MOV AX, @DATA MOV DS, AX
MOV ES, AX ;DS và ES chứa segment của đoạn dữ liệu MOV AH, 1 ;Chức năng nhập kí tự của ngắt 21h
INT 21h
STOSB ;Chuyển kí tự từ AL vào đầu chuỗi MOV AH, 4Ch ;Kết thúc INT 21h MAIN ENDP END MAIN Ví dụ 2: Nhập một chuỗi 10 kí tự từ bàn phím. Giải:
Để nhập 10 kí tự và cất nó vào một chuỗi trong bộ nhớ ta vẫn sử dụng phương pháp như ví dụ 1. Có một sốđiểm khác biệt như sau:
+ Phải có một vòng lặp với số lần lặp bằng 10.
+ Sau mỗi lệnh lưu chuỗi (STOSB) thì DI phải được tăng lên 1 để trỏ tới ô nhớ tiếp theo. Điều này được thực hiện nhờ lệnh xoá cờđịnh hướng (CLD).
Chương trình đầy đủ: TITLE Vi du 2 .MODEL SMALL .STACK 100H .DATA ChuoiKT DB 10 DUP (?) .CODE MAIN PROC
MOV AX, @DATA MOV DS, AX
MOV ES, AX ;DS và ES chứa segment của đoạn dữ liệu MOV CX, 10 ;Số lần lặp bằng 10
LEA DI, ChuoiKT ;DI chứa offset của ChuoiKT CLD ;Xoá cờ định hướng: DF = 0 Lap:
MOV AH, 1 ;Chức năng nhập kí tự của ngắt 21h INT 21h
STOSB ;Chuyển kí tự từ AL vào đầu chuỗi ;DI được tự động tăng lên 1
LOOP Lap
MOV AH, 4Ch ;Kết thúc INT 21h
MAIN ENDP END MAIN